我们在处理查询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',','));
效果也出来了,如下
标签:--,POS,游标,server,sql,where,id,select From: https://www.cnblogs.com/xielong/p/16808844.html