使用变量名创建数据库的SQL脚本

时间:2014-01-23 10:21:55

标签: sql-server-2008 tsql scripting ddl

我正在尝试创建一个通用脚本来创建数据库,并希望将数据库名称作为变量传递;但它不起作用。

到目前为止,这是我的代码

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'附近的语法不正确。

1 个答案:

答案 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所做的。