如何检查XML元素是否具有空字符串值的属性

时间:2011-03-11 20:42:23

标签: sql sql-server sqlxml xquery-sql

有没有办法使用SQLXML检查XML字段中元素的值是否为空?请考虑我在表Conf的列Test中包含以下数据:

<Conf>
  <UserData>
    <data type="str" value="" />
  </UserData>
</Conf>

我可以使用以下SQL请求检查data是否存在:

SELECT Test.Conf.exist('/Conf/UserData/data') FROM Test;

但是,如何检查data是否为空value?它可能类似于以下内容,但它不起作用:

SELECT Test.Conf.value('(/Conf/UserData/data/@value)[1]', 'nvarchar(max)')='' FROM Test;

我的最终解决方案是使用以下SQL语句:

SELECT Test.Conf.value('string-length(/Conf[1]/UserData[1]/data[1]/@value)', 'int') FROM Test;

3 个答案:

答案 0 :(得分:1)

这可能会有用。

SELECT Test.Conf.exist('data(/Conf/UserData/data[@value=''''])') FROM Test;

这将检查是否存在@value = ''的数据元素。

答案 1 :(得分:1)

使用XPath 1.0。如果为空,string(@someattribute)测试应该返回false。我对SQLXML一无所知,但如果你可以使用控制序列,它将会起作用。

答案 2 :(得分:0)

问题不在于XPath,而在于TSQL语法。

XML.Exist返回BIT数据类型,指示它是否存在。 SQL Server没有本机BOOLEAN数据类型(真正的真/假)。

所以,你的查询应该是

SELECT CASE WHEN Test.Conf.value('(/Conf/UserData/data/@value)[1]', 'nvarchar(max)')=''
       THEN 1 ELSE 0 END
FROM Test;