2016-07-28 3 views
1

DBをアタッチしようとしていますが、構文を理解できません。データベースのアタッチ構文エラー

DECLARE @path1 varchar(250)=N'D:\MSSQL\DATA\ProductDB_Temp.mdf'; 
DECLARE @path2 varchar(250)=N'D:\MSSQL\DATA\ProductDB_Temp_log.ldf'; 

/* Attach Database */ 
CREATE DATABASE ProductDB_Temp ON 
(FILENAME = @path1) , 
(FILENAME = @path2) 
FOR ATTACH 

エラーメッセージ: 'パス1 @'

付近に正しくない構文。私はこのような私のスクリプトを作成する場合はID、整数、Quoted_Id、文字列 またはtext_lex

を期待:

DECLARE @path1 varchar(250)=N'D:\MSSQL\DATA\ProductDB_Temp.mdf'; 
DECLARE @path2 varchar(250)=N'D:\MSSQL\DATA\ProductDB_Temp_log.ldf'; 

/* Attach Database */ 
CREATE DATABASE ProductDB_Temp ON 
(FILENAME = N'D:\MSSQL\DATA\ProductDB_Temp.mdf') , 
(FILENAME = N'D:\MSSQL\DATA\ProductDB_Temp_log.ldf') 
FOR ATTACH 

それは動作しますが、これは私がやりたいものを実際にはありません。

EXECの使用を避けようとしています。助言がありますか?

+0

は、なぜあなたは、動的SQLを避けるためにしようとしていますか?これは、動的SQLを使用して簡単に実行できます。 –

答えて

0

このようにデータベースを作成することはできません。

これには動的SQLが必要です。 this答えを見てください。この場合、以下のような

0

使用、動的SQL ..

DECLARE @path1 varchar(250)=N'D:\MSSQL\DATA\ProductDB_Temp.mdf'; 
DECLARE @path2 varchar(250)=N'D:\MSSQL\DATA\ProductDB_Temp_log.ldf'; 

/* Attach Database */ 


declare @sql nvarchar(max) 
SET @Sql = 'CREATE DATABASE newdatabase ON 
(filename = ' [email protected]+'), 
(filename = '[email protected]+') 
FOR ATTACH' 

print @sql 

チェック出力、:

CREATE DATABASE newdatabase ON 
(filename = D:\MSSQL\DATA\ProductDB_Temp.mdf), 
(filename = D:\MSSQL\DATA\ProductDB_Temp_log.ldf) 
FOR ATTACH 

ついに

EXEC(@SQL)