2016-09-07 14 views
2

にXMLノードへの参加:SQL Serverの:私は、次のようなテーブルを持っている1つのXML

DECLARE @myTable TABLE (Ordinal INT, MyXML XML) 
INSERT INTO @myTable (Ordinal, MyXML) VALUES (1, '<Item AnyAttribute="anyValue">1</Item>') 
INSERT INTO @myTable (Ordinal, MyXML) VALUES (1, '<Item AnyAttribute="anyValue">2</Item>') 

私は一つの大きなXMLにXMLフラグメントに参加すると:

SELECT MyXML AS 'OmitMe' FROM @myTable FOR XML PATH(''), ROOT('Items'), TYPE 

私が手:

<Items> 
    <OmitMe> 
    <Item AnyAttribute="anyValue">1</Item> 
    </OmitMe> 
    <OmitMe> 
    <Item AnyAttribute="anyValue">2</Item> 
    </OmitMe> 
</Items> 

しかし、私は取得したいと思います:

<Items> 
    <Item AnyAttribute="anyValue">1</Item> 
    <Item AnyAttribute="anyValue">2</Item> 
</Items> 

使用変数は、カーソルのようなループ機構の必要性を示唆するため、オプションではありません。

ご協力いただければ幸いです!

マーティン

EDIT:エド・ハーパーが提供する

ソリューションは、物事の大きなスキームに組み込むことができます。

SELECT CAST(REPLACE(CAST((SELECT MyXML AS Items FROM @myTable FOR XML PATH ('')) AS NVARCHAR(MAX)),N'</Items><Items>',N'') AS XML) 

それは次善のだが、それは作業を行います。指定された列名は、ワイルドカード文字(*)である場合

答えて

2

Columns with a Name Specified as a Wildcard Character

を見てください指定なしの列名が存在しないかのように、その列の内容 が挿入されています。

SELECT MyXML AS '*' FROM @myTable FOR XML PATH(''), ROOT('Items'), TYPE 
+1

驚くばかり!まさに私が探していたもの。 ;) –

+0

@Martin Giessen完全性のために:あなたは 'SELECT CAST(MyXML AS XML)... 'であっても' SELECT MyXML AS [node()] ...'と同じことになります。 *計算*が無名の列につながるため、2番目の式が機能します。 – Shnugo

関連する問題