2013-04-10 58 views
1

長時間搜索器第一次海報。動態SQL - 連接FROM表

我想創建一個動態SQL腳本,將動態部分連接成一個字符串形成From子句,這樣我就可以聲明表名一次(將來我會添加到這個以便我可以循環遍歷一個整串桌子)。然而,當我運行該腳本,我得到的錯誤:附近「+」

DECLARE @SCode varchar(4) 
DECLARE @Subcode varchar(4) 

SET @SCode = 'Client1' 
SET @Subcode = 'A'   
SELECT MAX(dateofchange) AS Maxdate, @SCode + 'Type'.ID 
FROM @SCode + 'Type' 

任何幫助將大大理解不正確的語法。我敢肯定,答案很簡單,但我對SQL遊戲比較陌生。

感謝,SSMS - 2005年

+0

哪個+?刪除@SCode +'Type'.ID並查看它運行 – Paparazzi 2013-04-10 18:32:23

+0

它是From中的+,因爲我將代碼一直剝離回僅僅是一個簡單的select * from和它的錯誤。但謝謝你的建議。 – Richard 2013-04-11 07:45:12

回答

1

試試這個動態的SQL腳本(選項爲SQLServer2008的+)

DECLARE @SCode varchar(10) = 'Client1', 
     @Subcode varchar(10) = 'A', 
     @dml nvarchar(400) 
SELECT @dml = 'SELECT MAX(dateofchange) AS Maxdate, ID FROM ' + QUOTENAME(+ @SCode + 'Type') 
EXEC sp_executesql @dml 
+0

請在下面查看我的附加答案,瞭解工作代碼並解釋爲什麼需要進行這些更改。 – Richard 2013-04-12 10:53:53

3

從亞歷山大費德林使用SQL Server的答案2005年,它提供了一個錯誤「無法分配默認值賦予局部變量。「然後爲每個變量「必須聲明標量變量‘@dml’」

這樣做的原因是,2005年,你必須聲明變量,並設置在像

DECLARE @SCode AS VARCHAR(MAX) 
SET @scode ='ID12' 

我簡化了例如然而,下面的代碼是2005年SSMS

DECLARE @dml as NVARCHAR(MAX) 
DECLARE @SCode AS VARCHAR(MAX) 
SET @scode ='ID12' 
Set @dml='SELECT ID 
FROM '+ QUOTENAME([email protected] +'Type') 
EXEC sp_executesql @dml 

旁註工作的例子:爲什麼你不能與一個代碼塊的答案評論我是無法理解。

+0

非常有價值的信息。感謝@理查德和+1在你的答案;) – 2013-04-12 11:00:37

+1

謝謝,現在我有足夠的代表能夠加1你的答案了。 – Richard 2013-04-16 20:27:33