2011-04-11 10 views
7

में पैरामीटर का उपयोग करें, मैं पथ निर्दिष्ट करना चाहता हूं जहां पैरामीटर का उपयोग कर SQL फ़ाइल में डेटा फ़ाइल और लॉग फ़ाइल बनाई गई है। यहां मैंने लिखा है:SQL सर्वर: CREATE DATABASE

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 

दुर्भाग्यवश, यह काम नहीं करता है। जब मैं एसक्यूएल सर्वर प्रबंधन स्टूडियो में इसे चलाने के लिए प्रयास करते हैं, मैं त्रुटि पास

गलत वाक्य रचना मिल गया '@DataFilePath'।

मुझे आश्चर्य है कि क्या करना है, यह भी संभव है?

धन्यवाद

+5

आप '@ LogFilePath', बजाय आप @DataFilePath दो बार सेट – Lamak

उत्तर

13

आप गतिशील एसक्यूएल का उपयोग करने के

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

EXEC (@sql) 
+0

धन्यवाद, यह मेरे लिए काम किया के लिए एक मूल्य नहीं दिया। – sean717

10

SQLCMD मोड का उपयोग कर प्रयास करें होगा। एसएसएमएस में, क्वेरी मेनू के तहत, 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