[SQL ] NILL和''判斷

看板Database (資料庫)作者 (兔子)時間7年前 (2017/01/24 11:45), 7年前編輯推噓2(207)
留言9則, 3人參與, 最新討論串1/1
資料庫名稱:MSSQL 資料庫版本:2012 內容/問題描述: 在做一個找資料的function F1 ALTER FUNCTION F1( @parm1 varchar(9), @parm2 varchar(9) ) 中略 SELECT 1 FROM T WHERE PARM1 = @parm1 and PARM2 = @parm2 後略 但是後來發現PARM1和PARM2中有''也有NULL 而前端傳來的@parm1和@parm2也不保證不會有人刻意把''處理成DBNull.Value 所以WHERE條件變成 (PARM1 = @parm1 or PARM1 is null and @parm1 = '' or PARM1 = '' and @parm1 is null or PARM1 is null and @parm1 is null) and (PARM2 = @parm2 or PARM2 is null and @parm2 = '' or PARM2 = '' and @parm2 is null or PARM2 is null and @parm2 is null) 然後其實變數是PARM1~到PARM11 整串變得超級長 我想說中間重覆的部份可以寫成一個FUNCTION ALTER FUNCTION F2 ( @str1 varchar(MAX) = null, @str2 varchar(MAX) = null ) RETURNS bit AS BEGIN RETURN CAST ( CASE WHEN @str1 = @str2 or @str1 is null and @str2 = '' or @str1 = '' and @str1 is null or @str1 is null and @str2 is null THEN 1 ELSE 0 END as bit) END 然後腦袋就卡住了 直覺在F1中call F2就不是個好方法 請問有什麼別的解嗎感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.75.101.50 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1485229543.A.395.html ※ 編輯: hirabbitt (211.75.101.50), 01/24/2017 11:46:23

01/24 11:48, , 1F
ISNULL(PARM1,'')將欄位先轉成只有有值或是''
01/24 11:48, 1F

01/24 11:49, , 2F
然後接@parm1之後可以先做處理 if @parm1 is null
01/24 11:49, 2F

01/24 11:49, , 3F
set @parm1 = '' 類似的方式
01/24 11:49, 3F

01/24 11:49, , 4F
這樣後面的主查詢指令就不會落落長了
01/24 11:49, 4F

01/24 11:53, , 5F
喔~ 太感謝了!!
01/24 11:53, 5F

01/24 15:10, , 6F
isnull(PARM1,'') = isnull(@parm1,'') and
01/24 15:10, 6F

01/24 15:10, , 7F
isnull(PARM2,'') = isnull(@parm2,'') and
01/24 15:10, 7F

01/24 15:11, , 8F
... 以此類推
01/24 15:11, 8F

01/24 15:19, , 9F
喔喔!! 喜歡這種寫法
01/24 15:19, 9F
文章代碼(AID): #1OXitdEL (Database)
文章代碼(AID): #1OXitdEL (Database)