2017-02-09 32 views
1

我已經包含的不一致性在T-SQL存儲過程與無效的比較檢查

--cutting the declaration of various variables 
SELECT @val = id FROM dbo.example_table 
WHERE [email protected] AND [email protected] 

if @val = null 
    insert record 

當這樣在存儲過程中與一個空表執行的零比較存儲的過程,這將插入記錄,但是當它作爲存儲過程之外的代碼塊執行時,它將不執行插入。還有其他SQL服務器,無論是在存儲過程的內部還是外部,永遠不會插入。

有一些解釋他爲什麼可以在某些情況下工作,但沒有在其他情況下工作?我知道執行比較的正確方法是@val IS NULL,但我很好奇@val = null是否記錄在任何地方以便完整。

+2

A ['SET ANSI_NULLS OFF'(https://msdn.microsoft。 com/en-us/library/ms188048.aspx)會導致這個...(如果是這種情況,你應該刪除它並用已記錄的方式重寫以處理空值) –

+0

你永遠不會比較null與任何東西 - 使用'is null ' – ajeh

回答

1

檢查設置爲ANSI_NULLS

這將返回一個

declare @var varchar(10) = null; 

SET ANSI_NULLS ON 
if (@var = null) select 'true'; 
else select 'false'; 

這將返回一個真正

declare @var varchar(10) = null; 

SET ANSI_NULLS OFF 
if (@var = null) select 'true'; 
else select 'false';