【问题标题】:SQL script to create a database using a variable name使用变量名创建数据库的 SQL 脚本
【发布时间】:2014-01-23 10:21:55
【问题描述】:

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

这是我目前的代码

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

【问题讨论】:

  • 我认为它工作? :}
  • 是不工作(对不起),它给出错误“'@ID'附近的语法不正确。”
  • 欢迎来到 SO,顺便说一句。 :} 对您的问题有帮助的是提供您遇到的特定错误消息,您尝试过的无济于事等等。它将帮助那些寻求帮助您的人不必运行您提供的内容以自己查看错误,可能会在他们的环境中看到不同的错误或没有错误,并且通常会减少摩擦以帮助您。

标签: sql-server-2008 tsql scripting ddl


【解决方案1】:

如果您可以在 SSMS 中使用 SQLCMD 模式(查询菜单中的SQLCMD 模式)或使用sqlcmd.exe 执行脚本,则可以使用SQLCMD scripting variable

: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 变量本质上是 SSDT 在后台所做的。

【讨论】:

  • 我正在尝试以相同的方式创建一个可以访问具有相同变量名的数据表的登录名,但我收到错误..请帮助,我的代码是 USE master;去拒绝查看任何数据库到 $(ID); GO错误是'.'附近的语法不正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多