2017-02-01 5 views
0

Xmlとしてテーブルを出力しようとしています。私は、ルートノード名を "New"にし、テーブルの各行を​​として表示します。Xmlにテーブル出力:特定の列値に基づいて属性値を表示

<new> 
    <member source="STORE"> 
       <externalId>111</externalId> 
       <eclubNo>123456</eclubNo> 
       <ssn>195812272796</ssn> 
       <firstName>Loke</firstName > 
       <lastName>Sjögren</lastName> 
       <email>[email protected]</email> 
     </member> 
     <member source="WEB"> 
       <externalId>222</externalId> 
       <eclubNo>764746</eclubNo> 
       <ssn>222</ssn> 
       <firstName>Loke</firstName > 
       <lastName>Sjögren</lastName> 
       <email>[email protected]</email> 
     </member> 
</new> 

あなたが見ることができるように、各​​はソースという属性を持っています。ソースの値は、ソース値を含むことができるテーブル内の同じ名前の列に依存します(値が "StoreEntry"の場合は "STORE"になり、 "WebEntry"の場合は上記のスニペットに見られるように "WEB" )。 For Xmlステートメントを使用してこのXmlを取得するにはどうすればよいですか?

答えて

2

次のように試すことができます。

ここでは動作例を示します。次回は、この自分(How to create a MCVE)をご用意ください

DECLARE @tbl TABLE(source VARCHAR(100),externalId INT,eclubNo INT,ssn BIGINT,firstName VARCHAR(100),lastName VARCHAR(100),email VARCHAR(100)); 
INSERT INTO @tbl VALUES 
('StoreEntry',111,123456,13213213123,'Loke','Sjörgen','[email protected]') 
,('WebEntry',222,34234,443,'Other','Name','[email protected]'); 

--Theクエリ

SELECT CASE WHEN [source]='StoreEntry' THEN 'STORE' ELSE 'WEB' END AS [@source] 
     ,externalId 
     ,eclubNo 
     ,ssn 
     ,firstName 
     ,lastName 
     ,email 
FROM @tbl AS YourTable 
FOR XML PATH('member'),ROOT('new'); 

結果

<new> 
    <member source="STORE"> 
    <externalId>111</externalId> 
    <eclubNo>123456</eclubNo> 
    <ssn>13213213123</ssn> 
    <firstName>Loke</firstName> 
    <lastName>Sjörgen</lastName> 
    <email>[email protected]</email> 
    </member> 
    <member source="WEB"> 
    <externalId>222</externalId> 
    <eclubNo>34234</eclubNo> 
    <ssn>443</ssn> 
    <firstName>Other</firstName> 
    <lastName>Name</lastName> 
    <email>[email protected]</email> 
    </member> 
</new> 
+0

はあなたに感謝します!今働いている。 – Disasterkid

関連する問題