附加DataBase语法错误

时间:2016-07-28 14:48:17

标签: sql sql-server

我正在尝试附加数据库,但无法弄清楚语法。

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

错误讯息:

  

'@ path1'附近的语法不正确。期待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。有什么建议?

2 个答案:

答案 0 :(得分:0)

我认为您无法以这种方式创建数据库。

您需要动态SQL。看看this回答。

答案 1 :(得分: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 = ' +@path1+'),
(filename = '+@path2+')
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)