SQL中in传入字符串处理方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中in传入字符串处理方法相关的知识,希望对你有一定的参考价值。
参考技术A 这里说到的in方法,例如:select * from Students where ID in ('111', '222', '333');
或者
select * from Students where Name in ('张三', '李四', '王五');
declare @sql varchar(1000)
set @sql = 'select * from Students where 1=1 '
set @sql = @sql + ' and ID in ('+ @整型参数+') '
declare @sql varchar(1000)
declare @strLen int
declare @next int
declare @where varchar(1000)
set @sql = 'select * from Students where 1=1 '
if(@userId<> '')
begin
set @strLen= dbo.Get_StrArrayLength(@userId,',')
set @next=1
set @where=''
if(@strLen > 0) begin
set @sql=@sql+' AND (UserID IN ('
while @next<=@strLen begin
set @where=@where+ ','''+ dbo.Get_StrArrayStrOfIndex(@userId,',',@next) +''''
set @next=@next+1
end
if(LEN(@where) > 3) begin
set @where= SUBSTRING(@where, 2, LEN(@where))
end
set @sql=@sql + @where +'))'
end
end
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 (‘[email protected]_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 @[email protected][email protected] 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直接使用第一种方法即可,
复杂写的可以使用第二方法。
也可以使用临时表的方法,
不过依然需要先切割字符串。
以上是关于SQL中in传入字符串处理方法的主要内容,如果未能解决你的问题,请参考以下文章