如何在 SQL 中使用 varchar 变量?

How to use varchar variable in SQL?

我尝试使用 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'.

我做错了什么?

您没有指定长度,在此上下文中默认长度为“1”。所以:

DECLARE @fsPath AS varchar(max) = 'D:\win-develop\FSCat';

然而,这只是一个问题。不允许在 alter database 中使用变量。 SQL 服务器文档在这个主题上相当复杂,但您始终可以使用动态 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;

刚刚 varchar 在 table.

中添加了值:D

varchar(50) 在 table.

中添加了值:D:\win-develop\FSCat

Specify the length !

您不能直接在 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

您需要使用动态 SQL 才能实现此目的。 我们不能将变量传递给 ALTER

查看 ALTER DATABASE / ADD FILE / VARIABLE FILENAME?