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

标签 sql sql-server xml

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

相关文章:

c# - LinqToSql查询返回时间太长性能太长

java - 如何使用 XMLMapper (Jackson) 将 List<String[]> 转换为 XML 对象?

xml - 将 XML 元素转换为具有计算值的属性

sql - DB (SQL) 自动压力/负载工具?

mysql - 选择具有相同 id 的下一条记录

mysql - Excel 无法将 mysql 中的日期识别为日期

mysql - 优化排序查询

c# - 使用 Microsoft Visual Studio 2010 在 C# 中构建的网页的 SQL 问题

sql - SQL Server 中的 ISNULL 与 IS NULL

c# - 如何使用 XML 阅读器反序列化 XML 片段