• 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',','));

    效果也出来了,如下

  • 相关阅读:
    文言文
    【我回来了】TO DO LIST
    AFO
    [DP]
    [CF1221F]Choose a Square
    关于博主(2)
    自我介绍( 并不?
    老年选手的复健之路
    CSP/NOIP 2019 游记
    CSP前模板复习
  • 原文地址:https://www.cnblogs.com/xielong/p/16808844.html
Copyright © 2020-2023  润新知