SQL中in參數在存儲過程中傳遞及使用的方法


背景:

1、使用存儲過程

2、存儲過程中有in

3、in括號里面的內容作為參數傳遞

解決方案:

1、直接拼接sql

可在存儲過程中拼接字符串,然后執行此字符串,類似於js中的eval

PROCEDURE [dbo].[INSelect]
    @P_0 NVARCHAR(600)        
AS
  DECLARE @A VARCHAR(6000)
  SET @A='SELECT * FROM testTb WHERE zip IN ('+@P_0+')' 

  然后用系統存儲過程sp_executesql執行@A即可!

2、定義方法將字符切割為集合

切割字符串方法

Create function  func_split_hongfei0416j (@SourceSql   varchar(8000),@StrSeprate   varchar(2))   
  returns   @temp   table(col   varchar(100))   
  as     
  begin   
  declare   @ch   as   varchar(100)   
  set   @SourceSql=@SourceSql+@StrSeprate     
  while(@SourceSql<>'')   
                  begin   
                  set   @ch=left(@SourceSql,charindex(@StrSeprate,@SourceSql,1)-1)   
  insert   @temp   values(@ch)   
  set   @SourceSql=stuff(@SourceSql,1,charindex(@StrSeprate,@SourceSql,1),'')   
                  end   
  return   
  end 

存儲過程書寫demo

CREATE PROC ps_spit_test      
( 
    @lettertype VARCHAR(100)  
)      
AS      
BEGIN      
  select * from y_paper 
  where lettertype in (select Col As lettertype 
from dbo.func_split_hongfei0416j(@lettertype,','))
end

exec ps_spit_test '118,148,163'

 

如果是簡單的sql直接使用第一種方法即可,

復雜寫的可以使用第二方法。

 

也可以使用臨時表的方法,

不過依然需要先切割字符串。

 


免責聲明!

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



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