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

效果也出來了,如下

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章