0

私は一時テーブルを持っています。このテーブルの列の数と列の名前は変更できます。この一時テーブルは別のクエリから生成されるためです。つまり、3〜15になる可能性があります。以下のコマンドを使用して、一時テーブルからXMLを取得します。

DECLARE @XML XML 
SET @XML= (SELECT * FROM ##temp FOR XML PATH(''))

出力例:<Name>abc</Name><ID>3</ID><Address>100/8 NY</Address>

ここで、タグ名とそれに対応する値を@variable、たとえば@StoreDataに入れたいと思います。

Sayselect @StoreDateは、以下の期待される出力を出力します。期待される出力:

名前='abc'およびID='3'およびアドレス='100/ 8 NY'

どうやってそれを手に入れるか。前もって感謝します。注:私はMSSQLバージョン2005を使用しています

4

2 に答える 2

3

これはあなたの要件を満たすでしょう...

;with cte as
(
    select 
        xr.value('fn:local-name(.)','varchar(50)') name, 
        xr.value('.','varchar(20)') val
    from @xml.nodes('//.') xq(xr)
    where xr.value('fn:local-name(.)','varchar(50)')<>''
)
    select STUFF(
        (select ' and ' + name + '='''+val+'''' from cte for xml path('')),1,4,'')

ただし、SQL フィルター文字列を構築しようとしている場合はsp_executesql、SQL 文字列を構築する代わりに with parameters を使用することをお勧めします。

于 2012-11-19T16:09:54.510 に答える
0

これを試して; ここに作業フィドルがあります

あなたの変数:

DECLARE @XX XML = '<Name>abc</Name><ID>3</ID><Address>100/8 NY</Address>'

クエリ:

SELECT 'Name = ''' + x.value('Name[1]','VARCHAR(100)') + ''' and ' +
       'ID = ''' + x.value('ID[1]','VARCHAR(100)') + ''' and ' + 
       'Address = ''' + x.value('Address[1]','VARCHAR(100)') + ''''
FROM @XX.nodes('/') MyXml(x)

出力:

Name = 'abc' and ID = '3' and Address = '100/8 NY'
于 2012-11-19T16:27:45.463 に答える