在存储过程中使用IN函数,传入多个参数时,会有问题,因为输入参数(1,2,3) 是一个数据,而不是一个集合,导致sql失效
三种解决方案:
1、建立函数分割输入参数里面的“,”
create FUNCTION [dbo].[Split2]( @RowData varchar(max), @SplitOn varchar(1)) RETURNS @RtnValue table ( Id int identity(1,1), Data varchar(4000)) AS BEGIN Declare @Cnt int Set @Cnt = 1 While (Charindex(@SplitOn,@RowData)>0) Begin Insert Into @RtnValue (data) Select Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1))) Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData)) Set @Cnt = @Cnt + 1 End Insert Into @RtnValue (data) Select Data = ltrim(rtrim(@RowData)) ReturnEND2、动态执行sql:EXEC('insert @TempTable select * from mytable where uid in ('+@ids+')')3、如果要在if语句中的sql用上in,使用charindex代替:If exists (Select 1 From [table] Where charindex(','+cast([ABC] as varchar)+',' , ','+@In_ABC+',')>0 )这个问题困扰了很久,现在就整理出来,希望大家可以参考参考
新闻热点
疑难解答