1

カンマ区切りを使用して、すべての戻りデータを変数に収集する必要があります。

次のような選択コマンドがあるとしますselect * from #temptable。それは戻ります:

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

期待される結果:@testvariableは値を保持します:'Value1'、'Value2'

このテーブルでは、2つの列がある可能性があり、すべての戻り結果を1つの変数に格納する必要があります。次のような単一の値を簡単に収集できます。select @var=column1 from #temptable.ただし、すべてを格納する必要があります。ここで問題となるのは、列の数が異なる可能性があることです。つまり、列の数と列の名前は別のクエリから生成されるため、フィールド名については言及できません。動的な方法が必要です。このテーブルでは、1行のみが返されます。前もって感謝します。

4

2 に答える 2

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 クエリを熟知している誰かによって単純化される可能性があります。

于 2012-11-19T13:35:46.510 に答える
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 '+@var+' from tableA')

SQL ステートメントの実行後に返される値を取得する場合は、 sp_executesql (Transact-SQL)を使用できます。

于 2012-11-19T13:32:42.513 に答える