2014-07-08 42 views
0

我正在嘗試創建一個允許將變量用作表名稱的過程。如何在SQL語句中使用變量來自行

實施例:

Select Temp1, Temp2 
From @var 

的@var具有正確的表名,與經由while循環每次迭代的變化。

-- Above sets up all Variables 
WHILE @Count >= @I 
BEGIN 
SET @ObjectID = (SELECT ObjectID FROM @TmpTable WHERE ID = @I) 
SET @TableName = (SELECT TableName FROM @TmpTable WHERE ID = @I) 
IF @I = 8 
BEGIN 

     SELECT * 
     INTO ##TMPTable 
     FROM @TableName 
     -- Additional Processing 
END 
END 
+0

你不能沒有使用動態SQL(樓內有選擇的字符串,然後執行該字符串)http://stackoverflow.com/questions/20678725/how-to-set-table- name-in-dynamic-sql-query或http://stackoverflow.com/questions/1325044/dynamic-sql-passing-table-name-as-parameter或http://stackoverflow.com/questions/10521144/how-做我使用SQL服務器表名稱在選擇查詢與變量...採取你所選的所有說動態SQL – xQbert

+0

我不明白。它如何變化?它沒有被用在循環中。更多代碼? :-p – Relevant

+0

我建議避免動態SQL,如果你可以找到另一種方式:http://www.sommarskog.se/dynamic_sql.html – Relevant

回答

0
DECLARE 
    @SQLString varchar(max), 
    @TempTableName varchar(100) 

SET @TempTableName = '##TMPTable' + cast(@@spid AS varchar(5)) 

WHILE @Count >= @I 
BEGIN 
SET @ObjectID = (SELECT ObjectID FROM @TmpTable WHERE ID = @I) 
SET @TableName = (SELECT TableName FROM @TmpTable WHERE ID = @I) 
IF @I = 8 
BEGIN 

     set @SQLString = ' 
     SELECT * 
     INTO ' + @TempTableName + ' 
     FROM ' + @TableName 

     EXECUTE (@SQLString) 

     EXECUTE ('SELECT * from ' + @TempTableName) 

     -- Additional Processing 
END 
END 
+0

這工作完美。謝謝 – epelletier9740