[轉]SQL Server 存儲過程中使用 in 動態變量


方法一:可以使用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  


我們為這個函數傳入字符串和分隔符,他就能將字符串按指定符號分割並作為查詢結果返回。

例如:執行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。

 

暫時只有以上三種方法,根據情況自己選擇吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM