在使用存儲過程的時候碰到一個問題: 存儲過程有一個int類型的參數,可傳0,1,2在存儲過程中篩選數據,如果傳空值則不做篩選。 然而存儲過程處理該參數時會把0當作空值來處理,達不到預期效果。 解決方法 :將int型參數換為varchar型參數則不會有此問題 問題示例: 上面的存儲過程是根據參數@se ...
在使用存儲過程的時候碰到一個問題:
存儲過程有一個int類型的參數,可傳0,1,2在存儲過程中篩選數據,如果傳空值則不做篩選。
然而存儲過程處理該參數時會把0當作空值來處理,達不到預期效果。
解決方法 :將int型參數換為varchar型參數則不會有此問題
問題示例:
1 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetUsers]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 2 drop procedure [dbo].[GetUsers] 3 GO 4 5 create procedure GetUsers 6 @sex int 7 as 8 begin 9 declare @sqlStr varchar(1000) 10 set @sqlStr = 'select name, sex from users' 11 if (@sex <> '') 12 set @sqlStr = @sqlStr + ' where sex =' + CONVERT(varchar(10),@sex) 13 exec(@sqlStr) 14 end
上面的存儲過程是根據參數@sex查找不同性別的用戶,sex=0為男性,sex = 1為女性,
但實際上並不符合預期效果,如下圖:
將參數@sex改為varchar類型即可。
convert