2016-01-11 99 views
0

我希望有人可以幫助我確定爲什麼這個查詢導致我的語法錯誤?SQL Server變量使用

這是一個腳本的一部分,當我硬編碼和定義@modifiedFileLocationC:\Program Files ---無論如何。

在這一步之前,我已經設置並打印出了modifiedFileLocation,它打印出我期望的內容。我試圖用這個查詢這裏的內部的價值:

(NAME = N$(databaseName), FILENAME = 'N' + @modifiedFileLocation + '\$(databaseName).mdf' , SIZE = 1048576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10240KB) 

我收到此錯誤信息:

附近有語法錯誤「+」。

我不知道它需要什麼樣子,和任何幫助/洞察力,將不勝感激

+0

你能分享更多的查詢的最佳方式? – Forty3

+1

這是否是ALTER DATABASE調用的一部分? – Forty3

+0

這是ALTER DATABASE命令的一部分 – user1058359

回答

0

你可以試試這個?我認爲$(databaseName)已經是一個字符串,所以它不需要'。另外,\需要被轉義。希望我不會太遠:)

(NAME = N$(databaseName), FILENAME = 'N' + @modifiedFileLocation + '\\'+$(databaseName)+'.mdf' , SIZE = 1048576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10240KB) 
+0

給了這一槍,仍然沒有運氣,我也得到了同樣的錯誤。 – user1058359

+0

$(databaseName)在我的原始示例中被視爲字符串類型時工作正常,它是我在查詢中給出的問題中設置的變量 – user1058359

0

可能是因爲你試圖在聲明中構建一個NVARCHAR。嘗試聲明另一個變量並在調用之前設置該值。

DECLARE @nvarPath NVARCHAR(MAX) = @modifiedFileLocation + '\\'+ $(databaseName) + '.mdf' 

(NAME = N$(databaseName), FILENAME = @nvarPath , SIZE = 1048576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10240KB) 
+0

以及我無法聲明該變量,因爲那樣會覆蓋我所擁有的在 – user1058359

+0

之前不確定是什麼意思..但是你不能在函數調用中進行字符串連接..就像你不能這樣做'exec sp_executesql N'Select * From'+'Table1'' – JamieD77

0

沒有辦法按原樣提出問題。相反,我找到了另一種方式來做到這一點。

保存整個腳本(無論存儲過程是)轉換成可變

DECLARE @sqlscriptname varchar(MAX) 

@sqlscriptname = <THE WHOLE SCRIPT> 

代替聲明變量如@logPath聲明它這樣{LOGPATH} 例如: (NAME = N {的databaseName },FILENAME = 'N''{LOGPATH}」,SIZE = 1048576KB,MAXSIZE = UNLIMITED,FILEGROWTH = 10240KB)

注意:您將需要使用四蜱( '爲了' ''),以報價你正在替換的字符串變量;雙蜱逃脫(「」)的字符串,另一個雙蜱添加蜱

,然後使用此功能:

SET @sqlscriptname = REPLACE(@sqlscriptname, '{logPath}', @modifiedFileLocation + '$(databaseName)_log.ldf') 

然後,一旦替換完成後,你可以簡單地運行:

EXECUTE(@sqlscriptname) 

做的非常令人費解的方式,但它似乎是一個存儲過程中