我尝试使用声明为变量的varchar
字符串:
DECLARE @fsPath AS varchar = 'D:\win-develop\FSCat';
但在使用中:
ALTER DATABASE MyDb
ADD FILE
( NAME = 'FSCatalog', FILENAME = @fsPath
)
TO FILEGROUP MyDbFSGroup;
GO
我收到了错误:
Incorrect syntax near '@fsPath'.
我做错了什么?
答案 0 :(得分:4)
您没有指定长度,在此上下文中默认长度为“1”。所以:
DECLARE @fsPath AS varchar(max) = 'D:\win-develop\FSCat';
然而,这只是一个问题。您不能在alter database
中使用变量。 SQL Server文档在此主题上相当复杂,但您始终可以使用动态SQL:
declare @sql nvarchar(max) = '
ALTER DATABASE MyDb
ADD FILE( NAME = ''FSCatalog'', FILENAME = ''@fsPath'')
TO FILEGROUP MyDbFSGroup';
select @sql = replace(@sql, '@fspath', @fsPath);
exec sp_executesql @sql;
答案 1 :(得分:3)
您需要使用动态SQL来实现此目的。 我们无法将变量传递给ALTER
答案 2 :(得分:1)
只需varchar
在表格中添加了值D
。
varchar(50)
在表格中添加了值D:\win-develop\FSCat
。
指定长度!
答案 3 :(得分:0)
您无法在ALTER数据库中直接使用变量。使用动态SQL。
DECLARE @sql nvarchar(4000)
SET @sql = 'ALTER DATABASE MyDb ADD FILE ( NAME = ''FSCatalog'', FILENAME = ' + @fsPath + ') TO FILEGROUP MyDbFSGroup; GO'
EXEC sp_executesql @sql