這幾天在寫 Store Procedure 時,總覺得怪怪的...怎麼結果不是我所想的,原來是變數的 Null 判斷寫法有問題... IF @val = Null 跟 IF @val is Null 的寫法結果會不同喔~而且跟 SET ANSI_NULL ON / OFF (連結為msdn說明) 的設定也有關係~
附上幾個範例,這樣看起來就清楚多了吧~
【範例一】 DECLARE @val CHAR(4) SET @val = Null SET ANSI_NULLS ON IF @val = Null print 'True' --False ELSE print 'False' IF @val is Null print 'True' --True ELSE print 'False' SET ANSI_NULLS OFF IF @val = Null print 'True' --True ELSE print 'False' IF @val is Null print 'True' --True ELSE print 'False' |
【範例二】 -- Create table t1 and insert values. CREATE TABLE t1 (a INT NULL) INSERT INTO t1 values (NULL) INSERT INTO t1 values (0) INSERT INTO t1 values (1) -- SET ANSI_NULLS to ON and test. PRINT 'Testing ANSI_NULLS ON' SET ANSI_NULLS ON DECLARE @varname int SELECT @varname = NULL SELECT * FROM t1 WHERE a = @varname --(影響 0 個資料列) SELECT * FROM t1 WHERE a <> @varname --(影響 0 個資料列) SELECT * FROM t1 WHERE a IS NULL --(影響 1 個資料列) -- SET ANSI_NULLS to OFF and test. PRINT 'Testing SET ANSI_NULLS OFF' SET ANSI_NULLS OFF DECLARE @varname int SELECT @varname = NULL SELECT * FROM t1 WHERE a = @varname --(影響 1 個資料列) SELECT * FROM t1 WHERE a <> @varname --(影響 2 個資料列) SELECT * FROM t1 WHERE a IS NULL --(影響 1 個資料列) -- Drop table t1. DROP TABLE t1 |
全站熱搜
留言列表