1

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

<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;
4

3 回答 3

1

可能这会起作用。

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

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

于 2011-03-11T20:56:08.453 回答
1

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

于 2011-03-11T20:56:38.157 回答
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;
于 2011-03-11T22:19:22.470 回答