我有一个如下表:
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>
使用变量不是一个选项,因为这意味着需要像游标这样的循环机制。
任何帮助将不胜感激!
马丁
编辑:
Ed Harper 提供的解决方案可以合并到更大的方案中:
SELECT CAST(REPLACE(CAST((SELECT MyXML AS Items FROM @myTable FOR XML PATH ('')) AS NVARCHAR(MAX)),N'</Items><Items>',N'') AS XML)
虽然不是最优的,但确实有效。
最佳答案
看看Columns with a Name Specified as a Wildcard Character
If the column name specified is a wildcard character (*), the content of that column is inserted as if there is no column name specified.
SELECT MyXML AS '*' FROM @myTable FOR XML PATH(''), ROOT('Items'), TYPE
关于SQL Server FOR XML : Joining XML nodes into one XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39367959/