2015-08-03 73 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