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

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 06:23   429   0

在存储过程中使用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
END
2、动态执行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 )

这个问题困扰了很久,现在就整理出来,希望大家可以参考参考

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP