需要使用 SQL 变量来定义 XML.值选择的命名空间



我知道如何使用 xpath 和定义命名空间从 XML 字段中选择一个值,但我需要使用多个 xpath 查询并将它们分配给我的选择。有没有比执行以下操作更简单的方法:

SELECT 
    id, name,
    [XML].value('declare namespace test="http://www.test.org/xml/";
                 declare namespace test2="http://www.test2.org";
                 (//test:Address[1][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation1,
    [XML].value('declare namespace test="http://www.test.org/xml/";
                 declare namespace test2="http://www.test2.org";
                 (//test:Address[2][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation2 
FROM  
    TEST

我想替换

'declare namespace test="http://www.test.org/xml/";
 declare namespace test2="http://www.test2.org";'

通过使用变量。我试图附加字符串,但我得到了以下内容:

XML 数据类型方法"value"的参数 1 必须是字符串文本。

必须有一种更简单的方法。

谢谢

-詹姆斯

谢谢@MikaelEriksson,

如果有人有类似的问题。这是答案。

;WITH XMLNAMESPACES ('http://www.test.org/xml/' as test, 'http://www.test.org/xml/' as test2)
SELECT id,
       name,
       [XML].value('(//test:Address[1][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation1,
       [XML].value('(//test:Address[2][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation2 
FROM  TEST

最新更新