我正试图从传递到存储过程的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/