我正在尝试附加数据库,但无法弄清楚语法。
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。有什么建议?
答案 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)