sql - 使用 IN (NULL) 查询 SQL Server 不起作用

标签 sql sql-server sql-server-2008 tsql table-variable

当我定义“用户定义的表类型”时,如下:

CREATE TYPE [dbo].[BitType] AS TABLE(
    [B] [bit] NULL
)

我在此表变量中放置了 0 和 null。 然后我执行以下查询:

SELECT something FROM theTable WHERE item IN @theBitTypeTable

只会得到item=0,而不是item is null

简单地说:SELECT some FROM theTable WHERE item IN (0, NULL) 不起作用(尽管没有错误) 它必须是从 theTable WHERE item=0 OR item IS NULL 中选择某些内容

所以,我的问题是,如果我喜欢使用用户定义的表类型,但我还需要使用NULL值。如何正确执行查询以获得包含空项的结果。

谢谢(顺便说一句,我使用 MS SQL Server 2008 R2)

最佳答案

NULL 值唯一有效的比较操作是 IS NULLIS NOT NULL,其他操作总是返回 false(实际上 - 未知,请参阅@Damien_The_Unknowner 的评论)

所以,请尝试以下操作

CREATE TYPE [dbo].[BitType] AS TABLE(
    [B] [tinyint] NOT NULL
)
GO
declare @theBitTypeTable BitType

insert @theBitTypeTable
VALUES(0), (2 /* instead of NULL*/)

SELECT something FROM theTable WHERE IsNull(cast(item as tinyint), 2) IN (select B from @theBitTypeTable)

关于sql - 使用 IN (NULL) 查询 SQL Server 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8737837/

相关文章:

sql - SQL用求和函数除以零

c# - 有时在 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 处超时 (...)

sql - 添加特殊约束以避免出现这种情况的重复行?

sql - CHAR 与 VARCHAR 以及加入时的后果

php - mongodb 在使用 php 时出错

sql - 在 Oracle 上导出许多表

php - 使用 PHP 在 SQL 列中输出不同的值

sql-server - 如何添加 SQL Server 2008 服务实例?

sql - SQL Server如何实现LIMIT?

java - 在 Java 中声明 SQL 变量