2012-11-19 52 views
1

我需要收集所有返回的數據爲使用逗號分隔的變量。SQL的收集所有數據到一個變量

讓說,我有一個像選擇命令:select * from #temptable。 它的回報:

Field1|Field2 
------------- 
Value1|Value2 

Expected Result: @testvariable hold the value: 'Value1','Value2'

在這個表他們可能有2列,我需要存儲所有返回的結果爲單一變量。我們可以很容易地收集像一個單一的值:select @var=column1 from #temptable.但我需要存儲all.Here問題是,列的數量可以有所不同。意思是,列的數量和列的名稱從另一個查詢產生。所以,我不能提到字段名稱。我需要一個動態的方式來做到這一點。在這張桌子上只有一行會被退回。提前致謝。

回答

1

值可以做到這一點沒有動態SQL XML

DECLARE @xml XML = (SELECT * FROM #temptable FOR XML PATH('')) 

SELECT stuff((SELECT ',' + node.value('.', 'varchar(100)') 
       FROM @xml.nodes('/*') AS T(node) 
       FOR XML PATH(''), type).value('.','varchar(max)') 
       , 1, 1, ''); 

這可能可以簡化爲比我更熟練的XML查詢。

+0

它顯示錯誤:消息102,級別15,狀態1,行4 附近有語法錯誤(' 消息156,級別15,狀態1,4 線 'FOR' 關鍵字附近的不正確語法 消息。 137,級別15,狀態2,行7 必須聲明標量變量 「@xml」 – riad

+0

@riad - 你可能會在CS整理,然後更改'DECLARE @XML XML'到'DECLARE @xml XML'也。什麼版本是你嗎?你不應該得到一個不正確的語法錯誤,如果晚於SQL Server 2000中 –

+0

我使用SQL Server 2005 – riad

0

由於列名是動態的,所以首先要採取的列名逗號在變量分離出來,然後可以使用EXEC(

例如: -

//making comma seperated column names from table B 
    DECLARE @var varchar(1000)=SELECT SUBSTRING(
     (SELECT ',' + Colnames 
     FROM TABLEB 
     ORDER BY Colnames 
     FOR XML PATH('')),2,200000) 
    //Execute the sql statement 
     EXEC('select '[email protected]+' from tableA') 

,如果你想獲得使用SQL語句執行後返回,那麼你可以使用 sp_executesql (Transact-SQL)

相關問題