2013-09-16 25 views
-1

我有一段存儲過程中的t-sql代碼,它根據給定的參數執行搜索。我似乎無法理解下面的語句背後的邏輯:T-SQL if isnull()構造

if isnull(@LoginName, '') = '' 
    select @LoginName = null 

這裏是我的思維方式:ISNULL是cheking的LoginName是否爲空,如果是,那麼它分配「」(這也是空,對吧?),然後將它與''(null?)進行比較。然後,如果表達式爲真 - 爲變量LoginName分配一個空值(爲什麼?它首先已經是空的!)。 有人可以在我的黑暗頭上灑一些光。我根本不明白這個邏輯。謝謝。

+2

NULL和''是不同的東西。 – Rob

+0

@Rob:除非你使用Oracle。也許user2785029使用Oracle之前和那裏一個空字符串被視爲NULL。 –

+0

@a_horse_with_no_name - 我不知道 – Rob

回答

0

無論@LoginName是NULL還是'',它都會強制@LoginName爲NULL。

+0

謝謝!我現在明白了。 – user2785029

0

那真是太傻了。應該是:

IF @LoginName = '' 
BEGIN 
    [email protected] = null 
END 

的代碼是企圖確保兩個空值和空字符串值處理,但沒有必要的空值轉換爲空字符串返回空轉換,只需將空字符串轉換如果它進來的話。

+0

我總是在IF語句中添加BEGIN和END,在維護期間減少意外。 – HLGEM

+0

謝謝澄清!我曾經在甲骨文工作過,因爲a_horse_with_no_name指出這兩件事是一回事。 – user2785029