SQL Server: используйте параметр в CREATE DATABASE - PullRequest
10 голосов
/ 12 апреля 2011

Я хочу указать путь, по которому файл данных и файл журнала создаются в сценарии 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'.

Мне интересно, возможно ли то, что я намеревался сделать?

Спасибо

Ответы [ 2 ]

17 голосов
/ 12 апреля 2011

Вам придется использовать динамический SQL

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

EXEC (@sql)
12 голосов
/ 12 апреля 2011

Попробуйте использовать режим 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...