sql server 存储过程中输入参数需要用in而失效的问题解决方案

2/13/2017来源:SQL技巧人气:1125

存储过程中使用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))

    Return
END2、动态执行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 )
这个问题困扰了很久,现在就整理出来,希望大家可以参考参考