2012-11-07 69 views
1

我有一個查詢,看起來像這樣:TSQL參數不進入IF條件

use [dbName] 

DECLARE @profile_id int 
SET @profile_id = 18 
DECLARE @test int 

SET @test = (SELECT user_profile_id FROM tbl_profiles WHERE id = @profile_id) 

SELECT @test as test 

if @test = NULL 
    SELECT 1 

else 
    SELECT 2 

我知道,在表中的值是空的,我可以看到@test正確正在設置爲該值,因爲第一SELECT所示:

|test 
1|NULL 

然而,在IF條件,因爲只有被返回所述第三選擇變量不被視爲空值,表示:

|(no column name) 
1| 2 

這是爲什麼?

回答

5

您需要使用IS NULL= NULL

if @test IS NULL 
    SELECT 1 

else 
    SELECT 2 

可以永遠比較NULL與 「正規軍」 相比,運營商 - 你總是IS NULLIS NOT NULL使用。

而且NULL真的不是一個本身 - 這是沒有價值的 ...

+0

只是爲了確認,如果我改變了連接設置,即'SET ANSI_NULL OFF',那麼我不能比較iT嗎? –

+0

@ShantanuGupta:也許 - 但肯定不推薦**並違反SQL-92語言標準。不要依賴非標準的兼容行爲......另外,[SQL Server 2012文檔](http://msdn.microsoft.com/zh-cn/library/ms188048.aspx)提到,在不太遙遠的未來,將其設置爲'OFF'的能力將被刪除... –

+1

感謝您的信息。我只是把它加到我的知識中。沒有打算這樣做,雖然:) –

1

使用IS NULL。相反的:

if @test = NULL 
    SELECT 1 

else 
    SELECT 2 

試試這個:

if @test IS NULL 
    SELECT 1 

else 
    SELECT 2 
0

你爲什麼不使用條件(ID = @profile_id @profile_id IS NOT NULL

SELECT user_profile_id FROM tbl_profiles WHERE (id = @profile_id AND @profile_id IS NOT NULL)

+0

好吧,這只是一個查詢,我測試IF ELSE條件如何與NULL值一起工作,但在實際查詢中,我將不得不採取不同的行動,取決於是否條目是NULL。 – Christian