我想使用参数指定在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'。
我想知道我打算做什么甚至是可能的?
由于
答案 0 :(得分: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)
答案 1 :(得分:12)
尝试使用SQLCMD模式。在SSMS中,在Query菜单下,选择SQLCMD Mode,然后运行此脚本。
: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