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

时间:2012-09-24 19:22:19

标签: sql xquery

我知道如何使用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必须是字符串文字。

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

谢谢,

-James

1 个答案:

答案 0 :(得分: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