插入或存储使用具有命名空间的 XML PATH 创建的 XML

Insert or store a XML created with XML PATH that has namespaces

我用 XML PATH 生成了一个 XML,它有 6 个命名空间。有一个架构,因此我无法更改 XML 结构。

WITH XMLNAMESPACES ('NS1' AS ns1,
                    'NS2' AS ns2, 
                    'NS3' AS ns3,
                    'NS4' AS ns4,
                    'NS5' AS ns5,
                    'NS6' AS ns6)
SELECT(SELECT 'something' AS 'ns3:node2' FOR XML PATH('ns2:Node1'), TYPE)
FOR XML PATH(''),
ROOT('ns1:RootNode');

现在我需要将输出插入 tmp table 或将其存储在变量中。 我遇到的问题是需要一个;在它前面。 所以 Set @myVariable = above Codeblockinsert into tmp table values(above codeblock) 都不起作用,我想知道是否有办法存储它。 XML 是有效的,如果我查看它或将其保存到硬盘,它工作正常,但我需要对 XML.

做更多的工作

您需要将整个 SELECT 放在进一步的子查询中。所以插入:

DECLARE @T TABLE (X XML);
WITH XMLNAMESPACES ('NS1' AS ns1,
                    'NS2' AS ns2, 
                    'NS3' AS ns3,
                    'NS4' AS ns4,
                    'NS5' AS ns5,
                    'NS6' AS ns6)
INSERT @T (X)
SELECT  (SELECT (SELECT 'something' AS 'ns3:node2' FOR XML PATH('ns2:Node1'), TYPE)
        FOR XML PATH(''),   
        ROOT('ns1:RootNode'));

SELECT * FROM @T;

或者给变量赋值:

DECLARE @X XML;
WITH XMLNAMESPACES ('NS1' AS ns1,
                    'NS2' AS ns2, 
                    'NS3' AS ns3,
                    'NS4' AS ns4,
                    'NS5' AS ns5,
                    'NS6' AS ns6)
SELECT @X= (SELECT  (SELECT 'something' AS 'ns3:node2' FOR XML PATH('ns2:Node1'), TYPE)
            FOR XML PATH(''),
            ROOT('ns1:RootNode')
            );
SELECT @X;