有没有办法使用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;
答案 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;