如何在SQL中使用varchar变量?

时间:2015-08-03 10:57:59

标签: sql sql-server sql-server-2014

我尝试使用声明为变量的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'.

我做错了什么?

4 个答案:

答案 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

查看ALTER DATABASE / ADD FILE / VARIABLE FILENAME?

答案 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