我有一个存储过程,其中包含
的空值比较--cutting the declaration of various variables
SELECT @val = id FROM dbo.example_table
WHERE type=@type AND date=@date
if @val = null
insert record
当在具有空表的存储过程中执行此操作时,这将插入记录,但是当它作为存储过程之外的代码块执行时,它将不执行插入。还有其他SQL服务器,无论是在存储过程内部还是外部,都不会在其上进行插入。
是否有一些解释为什么他可以在某些情况下工作而在其他情况下不工作?我知道执行比较的正确方法是@val IS NULL
,但我很想知道@val = null
是否记录完整性。
答案 0 :(得分:1)
检查ANSI_NULLS。
的设置这将返回 false :
declare @var varchar(10) = null;
SET ANSI_NULLS ON
if (@var = null) select 'true';
else select 'false';
这将返回 true :
declare @var varchar(10) = null;
SET ANSI_NULLS OFF
if (@var = null) select 'true';
else select 'false';