【SQL小技巧】儲存過程之傳參存在null

最近在做數據清理,所以也就多研究(複習)了下儲存過程,其中也不可避免的遇到了遊標、返回值等等概念。

背景

通過遊標取值,然後這些值作爲判斷條件到標準表進行select查詢到目標值,然而,某個字段可能爲空,從而導致結果找不到唯一的對應數據。
工作目的在於儘可能的減少空字段導致的查找不到結果問題,而且如果直接把找到的值作爲參數傳遞到標準表查詢,會出現一個條件是字段=null的情況,從而導致找不到結果。

set @zhen='**';
select * from tb where shi='A市' and xian='B縣' and
 zhen=(case when @zhen='C鎮' then 'C鎮' else  '問題點')

思路

爲了解決傳入參數爲null導致的找不到結果,zhen字段當爲null的時候,能夠消除null情況下對於select語句的影響。

方案一

最笨的方法,通過if else來判斷,

if zhen is null then
	select * from tb where shi='A市' and xian='B縣'
else
	select * from tb where shi='A市' and xian='B縣' and zhen='C鎮'
end if;

很笨,冗雜,但是也確實有效。

方案二

利用通配符實現,’_'代表任意字符

select * from tb where shi='A市' and xian='B縣' and
 zhen like (case when @zhen='C鎮' then 'C鎮' else  '%_')

這種方案下有一個小缺陷,當標準表的zhen字段爲null的時候,無法匹配,但是在我這個問題下並不影響我獲得正確結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章