2011-06-14 14 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을 사용하는 방법을 보여줍니다. –

관련 문제