Eri*_*Yin 4 sql t-sql sql-server table-variable sql-server-2008
当我定义“用户定义的表类型”时,为:
CREATE TYPE [dbo].[BitType] AS TABLE(
[B] [bit] NULL
)
Run Code Online (Sandbox Code Playgroud)
我将0和null放在此表变量中。然后我执行以下查询:
SELECT something FROM theTable WHERE item IN @theBitTypeTable
Run Code Online (Sandbox Code Playgroud)
只会得到item=0不item is null
简而言之:SELECT something FROM theTable WHERE item IN (0, NULL)不起作用(尽管没有错误)SELECT something FROM theTable WHERE item=0 OR item IS NULL
所以,我的问题是,如果我想使用User-Defined Table Type,但我还需要使用NULL值。如何正确执行查询以获取包含空项目的结果。
谢谢(顺便说一句,我使用MS SQL Server 2008 R2)
唯一具有NULL值的有效比较操作为IS NULL或IS NOT NULL,其他操作始终返回false(实际上-未知,请参见@Damien_The_Unbeliever的注释)
因此,请尝试以下
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)
Run Code Online (Sandbox Code Playgroud)