我正试图从传递到存储过程的XML参数中读取特定值。下面是到目前为止我的代码的一个粗略示例。

SET @SearchFilter =
'<?xml version="1.0"?>
 <KeywordSearch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <SelfEmployed xsi:nil="true" />
 </KeywordSearch>'

SET @SelfEmployed  = @SearchFilter.query('/KeywordSearch/SelfEmployed[1]').value('/', 'bit')

SELECT @SelfEmployed

我遇到的问题是,尽管当元素包含true或false值时,上面的返回是正确的,而元素不包含任何值,因此我希望返回null,但它返回false。是否有方法将数据类型正确地获取为可空位值?

最佳答案

如果将xquery更改为以下内容:

SELECT @SearchFilter.value('(/KeywordSearch/SelfEmployed/text())[1]', 'varchar(100)')

然后您将得到一个NULL值。因为您要检查<SelfEmployed>节点是否有任何文本值,所以应该将.value()解释为字符串类型-我在这里使用varchar(100)根据需要进行调整。

关于sql - 期望从SQL中的XML.value()返回null,但得到0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10735866/

10-08 23:46