我正在尝试从传递到存储过程的 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
值(value)回归。由于您正在检查是否 <SelfEmployed>
node 有任何文本值,你应该解释 .value()
作为字符串类型 - 我正在使用 varchar(100)
此处 - 根据需要进行调整。
关于sql - 期望从 SQL 中的 XML.value() 返回 null,但得到 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10735866/