看板 Database 關於我們 聯絡資訊
資料庫名稱: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
streetbad: ISNULL(PARM1,'')將欄位先轉成只有有值或是'' 01/24 11:48
streetbad: 然後接@parm1之後可以先做處理 if @parm1 is null 01/24 11:49
streetbad: set @parm1 = '' 類似的方式 01/24 11:49
streetbad: 這樣後面的主查詢指令就不會落落長了 01/24 11:49
hirabbitt: 喔~ 太感謝了!! 01/24 11:53
cutekid: isnull(PARM1,'') = isnull(@parm1,'') and 01/24 15:10
cutekid: isnull(PARM2,'') = isnull(@parm2,'') and 01/24 15:10
cutekid: ... 以此類推 01/24 15:11
hirabbitt: 喔喔!! 喜歡這種寫法 01/24 15:19