SQL中in参数在存储过程中传递及使用的方法
背景:
1、使⽤存储过程2、存储过程中有in
3、in括号⾥⾯的内容作为参数传递解决⽅案:1、直接拼接sql
可在存储过程中拼接字符串,然后执⾏此字符串,类似于js中的evalPROCEDURE [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直接使⽤第⼀种⽅法即可,复杂写的可以使⽤第⼆⽅法。
也可以使⽤临时表的⽅法,不过依然需要先切割字符串。
因篇幅问题不能全部显示,请点此查看更多更全内容