当我定义“用户定义的表类型”时,如下:
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 NULL
或 IS 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/