sql server 我们在做游标循环时,如何处理in里面多个id值的参数

我们在处理查询SQL的包含in 或not in时,一般都是这样写的,in(1,2) 或in('1','2');但是今天我在做游标循环时,发现传入ids参数无法执行。

效果大概这样 :select * from tab where id in('1,2');导致数据执行不了,那么如何处理这种情况呢?

--正常查询sql中in的条件
select * from Teacher where id in(1,2);
--异常查询sql中in的条件
select * from Teacher where id in('1,2');

正常查询结果集,如下:

 异常查询结果集,如下:

 那么,如何处理方法或存储过程传入参数类似 ‘1,2’的值呢,那我们需要进行一个方法处理,返回一个表形式

--把一串字符串分割成单列表形式  如 '1,2,3' 变成
--TB_V
--1
--2
--3
---
CREATE FUNCTION New_StringSplit
(
    @STR NVARCHAR(MAX)='',
    @SPLITER NVARCHAR(20)='')
    RETURNS @TB TABLE(TB_V NVARCHAR(200))       
    AS 
    BEGIN
        DECLARE @NUM INT, @POS INT,@NEXT_POS INT
        SET @NUM=0
        SET @POS=1
        WHILE (@POS <=LEN(@STR))
        BEGIN
            SELECT @NEXT_POS=CHARINDEX(@SPLITER,@STR,@POS)
            IF (@NEXT_POS=0 OR @NEXT_POS IS NULL)
            --BEGIN
                SELECT @NEXT_POS=LEN(@STR)+1
                
                INSERT INTO @TB VALUES(RTRIM(LTRIM(SUBSTRING(@STR,@POS,@NEXT_POS-@POS))))
                
                SELECT @POS=@NEXT_POS +1
            --END
            
        END
        RETURN
    END

执行创建函数后,我们的sql语句变成这样就可以了

--使用函数New_StringSplit处理后的sql
select * from Teacher where id in(select * from New_StringSplit('1,2',','));

效果也出来了,如下

 

posted @ 2022-10-20 10:25  小小邪  阅读(440)  评论(0编辑  收藏  举报