2011-03-11 122 views
1

有没有办法使用SQLXML检查XML字段中元素的值是否为空值?你看我在表中Test的列Conf以下数据:如何检查XML元素是否具有空字符串值的属性

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

我可以检查data存在通过以下SQL请求:

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; 

回答

1

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

+0

'字符串length'功能做这项工作。 – 2011-03-14 08:36:44

1

可能这会工作。

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

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

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;