期望从SQL中的XML.value()返回null,但得到0

Poo*_*oli 3 xml sql sql-server

我试图从传递给存储过程的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
Run Code Online (Sandbox Code Playgroud)

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

mar*_*c_s 5

如果您将XQuery更改为以下内容:

SELECT @SearchFilter.value('(/KeywordSearch/SelfEmployed/text())[1]', 'varchar(100)')
Run Code Online (Sandbox Code Playgroud)

那么您将获得NULL回值。由于您正在检查<SelfEmployed>节点是否具有任何文本值,因此应将解释.value()为字符串类型-我在varchar(100)这里使用-根据需要进行调整。