方法一:可以使用exec,把整個sql當做參數來執行
例如:
exec ('select * from OrganiseUnit where OrganiseCode in ('+@OrganiseCode+')');
這樣存儲過程修改復雜,沒有防注功能。
方法二:我們采用另一種方案來解決,先寫一個SQL函數,功能是分割字符串
create function SplitIn(@c varchar(2000),@split varchar(2))
returns @t table(col varchar(20))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
returns @t table(col varchar(20))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
我們為這個函數傳入字符串和分隔符,他就能將字符串按指定符號分割並作為查詢結果返回。
例如:執行select col from SplitIn('10000001,10000002,10000003',',')
返回:
10000001
10000002
10000003
有了這個函數,我們就有了新的解決方案了
定義參數@OrganiseCode,為其傳入字符串,這個參數由一個或多個OrganiseCode構成,中間用“,”分割;
調用方式:select * from OrganiseUnit where OrganiseCode in (select col from SplitIn(@OrganiseCode,','))
方法三:用字符串檢索函數
SELECT count(1) Into :li_dsj_cnt1 From t_hlcm_dsj_lsb Where charindex(dq , :ls_dq_string) > 0 ;
不過這個使用檢索結果是模糊檢索,就是 charindex('你好' ,'你好啊') > 0 也會返回true。
暫時只有以上三種方法,根據情況自己選擇吧。