2011-06-14 9 views
3
DECLARE @dbfilepath nvarchar(128) 
SET @dbfilepath = 'C:\SqlDataFiles\Cache.mdf' 
GO 

USE [master] 
GO 
CREATE DATABASE [Cache] ON PRIMARY 
(NAME = N'Cache', FILENAME = @dbfilepath, SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) 
GO 

なぜこれは機能しませんか?変数から文字列を取得する

それは与える:

メッセージ102、レベル15、状態1、行3 付近に正しくない構文 '@dbfilepath'。

+0

「CREATE DATABASE」ステートメント内で変数を使用することはできません。 –

答えて

1

あなたはそれを実行する必要があります。

USE [master] 
GO 
DECLARE @dbfilepath nvarchar(128) = 'C:\MSSQL\Cache.mdf' 
DECLARE @SQL NVARCHAR(MAX) = N'CREATE DATABASE [Cache] ON PRIMARY (NAME = N''Cache'', FILENAME = ''' + @dbfilepath + ''', SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB)' 
EXEC(@SQL) 
0

これを試してみてください:

DECLARE @dbfilepath nvarchar(128); 
SET @dbfilepath = 'C:\\SqlDataFiles\\Cache.mdf'; 
PRINT @dbfilepath; 

は、データベースの作成文で@dbfilepathを使用するには、動的SQLを使用する必要があります。

+0

これは、前述と同じパスを印刷しています。 – Pankaj

+0

@SQL。はい。しかし今、問題に言及されているエラーは起こりません。 –

+0

@Alex Kの答えは、動的SQLを使用する方法を示しています。 –

関連する問題