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传入字符串处理方法的主要内容,如果未能解决你的问题,请参考以下文章

mybatis如何传入java中拼接的sql语句

“sql”语句中“in”怎么用?

SQL in查询字段为Guid拼接处理办法

jdbc中PreparedStatement中in的用法

mybatis #{}和${}的区别是什么?

HttpPost请求将json作为请求体传入的简单处理方法