使用空比较检查的T-SQL存储过程不一致

时间:2017-02-09 17:03:51

标签: sql-server tsql

我有一个存储过程,其中包含

的空值比较
--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是否记录完整性。

1 个答案:

答案 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';