使用参数在CREATE DATABASE中创建数据库。

14
我想在一个SQL脚本中使用参数来指定数据文件和日志文件的路径。以下是我写的内容:
DECLARE @DataFilePath AS NVARCHAR(MAX)

SET @DataFilePath = N'C:\ProgramData\Gemcom\'

DECLARE @LogFilePath AS NVARCHAR(MAX)

SET @DataFilePath = N'C:\ProgramData\Gemcom\'


USE master
Go
CREATE DATABASE TestDB
ON 
PRIMARY 
( NAME = N'TestDB_Data', FILENAME = @DataFilePath )
LOG ON 
( NAME = N'TestDB_Log', FILENAME = @LogFilePath  )

GO

很遗憾,这个不起作用。当我尝试在SQL Server Management Studio中运行它时,我得到了错误:

附近的语法不正确 '@DataFilePath'。

我想知道我打算做的事情是否可能?

谢谢


5
你没有给 @LogFilePath 赋值,反而将 @DataFilePath 赋值了两次。 - Lamak
2个回答

18

你将需要使用动态SQL

SELECT @sql = 'CREATE DATABASE TestDB ON PRIMARY ( NAME = ''TestDB_Data'', 
 FILENAME = ' + quotename(@DataFilePath) + ') LOG ON ( NAME = ''TestDB_Log'', 
FILENAME = ' + quotename(@LogFilePath) + ')'

EXEC (@sql)

13

尝试使用SQLCMD模式。在SSMS中,选择查询菜单下的SQLCMD模式,然后运行此脚本。

:SETVAR DataFilePath N'C:\ProgramData\Gemcom\TestDB.mdf'    
:SETVAR LogFilePath N'C:\ProgramData\Gemcom\TestDB.ldf'

USE master
Go
CREATE DATABASE TestDB
ON 
PRIMARY 
( NAME = N'TestDB_Data', FILENAME = $(DataFilePath) )
LOG ON 
( NAME = N'TestDB_Log', FILENAME = $(LogFilePath)  )

GO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接