2015-08-03 27 views
0

我尝试使用varchar字符串声明为变量:如何在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'. 

什么,我做错了什么?

回答

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; 
+0

我有错误'Incorect语法FSCatalog'附近。 –

+0

戈登:请编辑您的答案,使用''FSCatalog''而不是一个单引号 – Alan

1

只是varchar增值:D表。

varchar(50)在表中增加了值:D:\win-develop\FSCat

Specify the length !

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 
+0

用你的例子我得到了错误:'D语法附近'错误:'。 ' –

+0

正如其他评论者指出的,你没有为varchar指定长度...... Gordon的答案是更完整的答案。脚本中有两个错误。 – Alan