T-SQL Xquery Exist方法什么都不返回

时间:2015-07-01 20:57:10

标签: sql-server xml tsql xquery

我有以下xquery部分,我正在尝试在我的t-sql脚本之外进行测试:

    DECLARE @x XML

    SELECT @x = N'<?xml version="1.0" encoding="utf-16"?>
    <Root xmlns="http://www.w3.org">
        <Header>
            <Record>
                <A99>
                    <A99_01_0>
                        <A99_01>TEST</A99_01>
                        <A99_02>TEST</A99_02>
                        <A99_03>TEST</A99_03>
                    </A99_01_0>
                </A99>
            </Record>
        </Header>
    </Root>
    '; 

select @x.exist('//Header/Record/A99/A99_01_0/A99_01')

我只想检查A99_01标签之间是否有值。但是根据我的exists(),我的输出会一直回到0,表明它不存在。

有什么我想念的吗?我已经仔细检查以确保我对exists()的语法是正确的。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

是的 - 您错过了XML文档中定义的 XML命名空间

SELECT @x = N'<?xml version="1.0" encoding="utf-16"?>
              <Root xmlns="http://www.w3.org">
                    *************************

您需要将SELECT更改为:

WITH XMLNAMESPACES(DEFAULT 'http://www.w3.org')
  SELECT 
      @x.exist('//Header/Record/A99/A99_01_0/A99_01')