我正在尝试创建一个通用脚本来创建数据库,并希望将数据库名称作为变量传递;但它不起作用。
到目前为止,这是我的代码
DECLARE @ID sysname;
SET @ID = 'test'
SET @ID = QUOTENAME(@ID)
CREATE DATABASE @ID
ON PRIMARY
( NAME = [' + @ID + '], FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\' +@ID+ '.mdf' , SIZE = 211968KB ,
MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = [' + @ID + '_log'], FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\'@ID + '_log.ldf' , SIZE = 149696KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
这给了我以下错误:
'@ID'附近的语法不正确。
答案 0 :(得分:2)
如果您可以在SSMS中使用SQLCMD模式(查询菜单中的 SQLCMD模式)或使用sqlcmd.exe
执行脚本,则可以使用{{ 3}}:
:setvar ID "test"
CREATE DATABASE [$(ID)]
ON PRIMARY ( NAME = ['$(ID)_Primary'], FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\$(ID).mdf' , SIZE = 211968KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON ( NAME = ['$(ID)_log'], FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\$(ID)_log.ldf' , SIZE = 149696KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
从命令行,你需要注释掉:setvar ID "test"
语句(即--:setvar ID "test"
)并像这样运行脚本......
sqlcmd.exe -E -i YourScript.sql -v ID="real"
...假设Windows身份验证,SQL Server的本地默认实例,以及当前目录中的YourScript.sql
。
键是-v
命令行选项,用于指定要设置的SQLCMD变量的名称及其值。
使用像这样的SQLCMD变量基本上是SQLCMD scripting variable所做的。