SQL Server:在CREATE DATABASE中使用参数

sea*_*717 12 sql sql-server

我想使用参数指定在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
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.当我尝试在SQL Server Management Studio中运行它时,我收到了错误

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

我想知道我打算做什么甚至是可能的?

谢谢

Her*_*nan 17

您将不得不使用动态SQL

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

EXEC (@sql)
Run Code Online (Sandbox Code Playgroud)


Joe*_*lli 12

尝试使用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
Run Code Online (Sandbox Code Playgroud)