sql server,想求教一下关于通过变量声明@创建新数据库的方法,谢谢!
目的很简单,就是想通过Transact-SQL变量的声明的方式创建一个新的数据库,但是不会弄,一般普通的创建数据库语句是如下这样的:createdatabase[14年4...
目的很简单,就是想通过Transact-SQL变量的声明的方式创建一个新的数据库,但是不会弄,一般普通的创建数据库语句是如下这样的:
create database [14年4月底a]
on
primary(
name='14年4月底a',
filename='F:\sqlserver数据与日志\数据\14年4月底a.mdf',
SIZE=3MB,
FILEGROWTH=1MB
)
LOG ON
(
NAME='14年4月底a_LOG',
FILENAME='F:\sqlserver数据与日志\日志\14年4月底a_log.ldf',
SIZE=1MB,
FILEGROWTH=10%
)
但是如果我想把数据库的名字作为变量,应该要怎么做?我写的如下脚本,但是不成功,不知道该怎么办。。。
declare @i varchar(500),@j varchar(500),@k varchar(500),@l varchar(500),@sql varchar(500)
set @i='14年4月底a'
set @j='F:\sqlserver数据与日志\数据\14年4月底a.mdf'
set @k='F:\sqlserver数据与日志\日志\14年4月底a_log.ldf'
set @l=@i+'_log'
set @sql='create database ['+@i+']
on
primary (
name='+'''+@i+'''+','+
'filename='+'''+@j+'''+','+
'SIZE=3MB,
FILEGROWTH=1MB
)'+'
LOG ON
(
NAME='+'''+@l+'''+','+
'FILENAME='+'''+@k+'''+','+
'SIZE=1MB,
FILEGROWTH=10%
)'
exec(@sql)
执行失败,如截图所示
求各位大神指导,以上的语法到底出了什么问题?应该要怎么做才能达到目的呢?
感觉好像是单引号的问题,
如果没有变量的原来的语句中有单引号’的话,放到变量赋值中的字符串应该怎么表示? 展开
create database [14年4月底a]
on
primary(
name='14年4月底a',
filename='F:\sqlserver数据与日志\数据\14年4月底a.mdf',
SIZE=3MB,
FILEGROWTH=1MB
)
LOG ON
(
NAME='14年4月底a_LOG',
FILENAME='F:\sqlserver数据与日志\日志\14年4月底a_log.ldf',
SIZE=1MB,
FILEGROWTH=10%
)
但是如果我想把数据库的名字作为变量,应该要怎么做?我写的如下脚本,但是不成功,不知道该怎么办。。。
declare @i varchar(500),@j varchar(500),@k varchar(500),@l varchar(500),@sql varchar(500)
set @i='14年4月底a'
set @j='F:\sqlserver数据与日志\数据\14年4月底a.mdf'
set @k='F:\sqlserver数据与日志\日志\14年4月底a_log.ldf'
set @l=@i+'_log'
set @sql='create database ['+@i+']
on
primary (
name='+'''+@i+'''+','+
'filename='+'''+@j+'''+','+
'SIZE=3MB,
FILEGROWTH=1MB
)'+'
LOG ON
(
NAME='+'''+@l+'''+','+
'FILENAME='+'''+@k+'''+','+
'SIZE=1MB,
FILEGROWTH=10%
)'
exec(@sql)
执行失败,如截图所示
求各位大神指导,以上的语法到底出了什么问题?应该要怎么做才能达到目的呢?
感觉好像是单引号的问题,
如果没有变量的原来的语句中有单引号’的话,放到变量赋值中的字符串应该怎么表示? 展开
3个回答
展开全部
exec(@sql)
改为 exec sp_executesql @sql
对应的文件夹存在,如果还是不对,@i,@j 的赋值的单引号前加上大写N试试
改为 exec sp_executesql @sql
对应的文件夹存在,如果还是不对,@i,@j 的赋值的单引号前加上大写N试试
追答
@i和@j没有拼对语句。
declare @i varchar(500),@j varchar(500),@k varchar(500),@l varchar(500),@sql varchar(500)
set @i='14年4月底a'
set @j='F:\sqlserver数据与日志\数据\14年4月底a.mdf'
set @k='F:\sqlserver数据与日志\日志\14年4月底a_log.ldf'
set @l=@i+'_log'
set @sql='create database ['+@i+']
on
primary (
name='''+@i+''','+
'filename='''+@j+''','+
'SIZE=3MB,
FILEGROWTH=1MB
)'+'
LOG ON
(
NAME='''+@l+''','+
'FILENAME='''+@k+''','+
'SIZE=1MB,
FILEGROWTH=10%
)'
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
刚开始学习server,遇到同样的问题,虽然是十年前的问题,为方便后来者,在此解答。
@i和@l属于数据库名,在name中不应该用单引号,应该用中括号,其他内容不变。
@i和@l属于数据库名,在name中不应该用单引号,应该用中括号,其他内容不变。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用Exec命令,先把以上Create语句拼接成字符串,再用execsql执行即可
追问
什么意思?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询