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

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

时间:2022-10-20 10:33:06浏览次数:41  
标签:-- POS 游标 server sql where id select

我们在处理查询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

相关文章

  • SQL优化 20 连击
    一、查询SQL尽量不要使用select*,而是具体字段1、反例SELECT*FROMuser2、正例SELECTid,username,telFROMuser3、理由节省资源、减少网络开销。可能用到......
  • sql server/如何根据条件查找重复的数据行集合
    我们在使用Sqlserver数据库时,难免出现一些通过后台导入的数据,导致数据表出现相同条件多条记录,我们如何查找重复数据呢?首先,我们来模拟出重复的数据,进行如下数据准备(由于是......
  • windowsServer服务器启动mysql报错解决方案
    PS:在最近用windowsServer部署应用的时候,由于项目使用的mysql的绿化版本,启动的时候会报错,刚好记录下来解决方案,让后面的人不踩坑,能看到这个文章也是缘分吧。所需文件下载......
  • MySQL定时任务不执行 任务调度不执行原因分析及解决方法
    前言在使用数据库定时任务时,常常会出现定时任务不执行的问题,现对该问题出现的原因及解决方案做一些分析和整理。原因分析及解决方法当我们发现MySQL的定时任务没有执行时,......
  • mysql函数 字符长度限制_MySQL中使用group_concat()函数数据字符过长报错的问题解决方
    selectGROUP_CONCAT(uid)asuids,spread_uidfromeb_user_spreadwhereuid<>spread_uidGROUPBYspread_uid使用GROUP_CONCAT函数将字符串连接起来,数据量大的时候,会......
  • 【MySQL】多行子查询
    1.多行子查询也称为集合比较子查询,内查询返回多行,使用多行比较操作符。操作符含义IN等于列表中的任意一个ANY和子查询返回的某一个值比较,需要和单行比较......
  • java连接sqlserver的方法分享
    转自:http://www.java265.com/JavaJingYan/202206/16552126983712.htmlsqlserver:   SQLServer是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Micros......
  • MSSQL中遍历数据库查找匹配值
    declare@valueVARCHAR(1024)--设置需要搜索的文本set@value='张三'SETNOCOUNTONDECLARE@sqlVARCHAR(1024)DECLARE@tableVARCHAR(64)DECLARE@columnVARC......
  • docker安装mysql
    一、安装mysql1、dockerpullmysql:8.0.23 下载mysql镜像2、创建容器dockerrun-it-d--namemysql--net=host\-m500m-v/root/mysql/data:/var/lib/mysql\-v......
  • MySQL多表&事务课堂笔记
    今日内容1.多表查询2.事务3.DCL多表查询:*查询语法: select 列名列表 from 表名列表 where....*准备sql #创建部门表 CREATETABLEdept( idINT......