2016-08-11 9 views
1

物事で私を助けてください。XML for SQLネームスペース

Query: 

DECLARE @XML VARCHAR(1000) 
DECLARE @xmlns VARCHAR(1000) 

SET @xmlns = 'http://google.example' 
SET @XML = 

REPLACE(
      (
      SELECT TOP 1 
      Param1 as 'Param1', 
      Param2 as 'Param2', 
      Param3 as 'Param3', 
      @XMLNS AS xmlns, 

       (
        SELECT 
         NAME as 'NAME', 
         SEX as 'SEX', 
         EMAIL as 'EMAIL' 
        FROM 
         #body AS BODY 
        FOR XML PATH('BODY'),TYPE 
       ) 
       FROM 
        #head AS HEAD 
       FOR XML AUTO 

      ),' xmlns=""','' 
     ) 

SELECT CAST(@XML AS XML) AS myXML 

現在の結果は次のとおりです:

<HEAD xmlns="http://google.example" Param1="AAA" Param2="BBB" Param3="CCC"> 
    <BODY> 
    <NAME>Tania</NAME> 
    <SEX>Female</SEX> 
    <EMAIL>[email protected]</EMAIL> 
    </BODY> 
    <BODY> 
    <NAME>Sergey</NAME> 
    <SEX>male</SEX> 
    <EMAIL>[email protected]</EMAIL> 
    </BODY> 
</HEAD> 

予想される結果は次のようになります

#head 

PARAM1 PARAM2 PARAM3 
------ ------ ------ 
AAA BBB CCC 

#body 

NAME     SEX     EMAIL 
-------------------- -------------------- -------------------- 
Tania    Female    [email protected] 
Sergey    male     [email protected] 

が、私は次のクエリを使用していますXMLを作るために:

は、私は2つのテーブルを持っています

<ns0:HEAD Param1="AAA" Param2="BBB" Param3="CCC" xmlns:ns0="http://google.example"> 
    <BODY> 
    <NAME>Tania</NAME> 
    <SEX>Female</SEX> 
    <EMAIL>[email protected]</EMAIL> 
    </BODY> 
    <BODY> 
    <NAME>Sergey</NAME> 
    <SEX>male</SEX> 
    <EMAIL>[email protected]</EMAIL> 
    </BODY> 
</ns0:HEAD> 

期待どおりの結果に到達する方法を知っている人はいますか?

ご協力いただきありがとうございます。

+0

タグ "SQL" は十分ではありません!実際のDBMS(ベンダーとバージョン)にタグを付けるためにあなたの質問を編集してください... – Shnugo

答えて

2

これはSQL-Serverの(あなたのコードは次のようになります)だった場合、あなたはこれを試してみてください:

create table #head(PARAM1 varchar(100), PARAM2 varchar(100), PARAM3 varchar(100)); 
insert into #head values 
('AAA','BBB','CCC'); 

create table #body(NAME varchar(100), SEX varchar(100), EMAIL varchar(100)); 
insert into #body values 
('Tania','Female','[email protected]') 
,('Sergey','male','[email protected]'); 
GO 

- このは、同様BODYに名前空間を追加します。問題を作るべきではありません、それはあなたが内側の名前空間を避けたい--If、あなたはこれを試みることができるだけでなく、既知の問題...

WITH XMLNAMESPACES('http://google.example' AS ns0) 
SELECT PARAM1 AS [@Param1] 
     ,PARAM2 AS [@Param2] 
     ,PARAM3 AS [@Param3] 
     ,(
     SELECT NAME,SEX,EMAIL 
     FROM #body 
     FOR XML PATH('BODY'),TYPE 
     ) 
FROM #head 
FOR XML PATH('ns0:HEAD'); 

です。

DECLARE @bodyXML XML= 
(SELECT NAME,SEX,EMAIL 
     FROM #body 
     FOR XML PATH('BODY'),TYPE 
); 

WITH XMLNAMESPACES('http://google.example' AS ns0) 
SELECT PARAM1 AS [@Param1] 
     ,PARAM2 AS [@Param2] 
     ,PARAM3 AS [@Param3] 
     ,@bodyXML 
FROM #head 
FOR XML PATH('ns0:HEAD'); 

--cleanアップ

GO 
drop table #head; 
drop table #body; 
+0

あなたの助けをありがとう! –

関連する問題