如何为 WHERE/IN 函数创建变量列表?

问题描述 投票:0回答:1

我正在从大型数据集中搜索大量 ID 列表。 当我尝试使用 IN 搜索 ID 时,它说我已超出字符限制,因此无法运行。

如果我要将它们分成可管理的大小(见下文),由于大小,我会花费很长时间。

是否可以有一个包含我想要的所有ID列表的变量,并在where函数中使用IN VAR?

如果我要分成更小的块

(customer_id in ('1', '2', '3', ..., '1000')
or
customer_id in ('1001', '1002', '1003', ..., '2000')
or
customer_id in ('2001', '2002', '2003', ..., '3000'))

我想要什么(逐字)

Cust_ID_List IN ('1', '2', '3', ... '3000') -- 变量

从数据中选择* ID 在 Cust_ID_List 中的位置

sql where-in character-limit
1个回答
0
投票

创建一个函数:

CREATE FUNCTION [dbo].[sp_Split](@text nvarchar(max), @delimiter nvarchar(20) = ' ')
    RETURNS @Strings TABLE
    (    
      position int IDENTITY PRIMARY KEY,
      value varchar(8000)   
    )
    AS
    BEGIN
    DECLARE @index int 
    SET @index = -1 
    WHILE (LEN(@text) > 0) 
      BEGIN  
        SET @index = CHARINDEX(@delimiter , @text)  
        IF (@index = 0) AND (LEN(@text) > 0)  
          BEGIN   
            INSERT INTO @Strings VALUES (@text)
              BREAK  
          END  
        IF (@index > 1)  
          BEGIN   
            INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))   
            SET @text = RIGHT(@text, (LEN(@text) - @index - len(@delimiter) +1))  
          END  
        ELSE 
          SET @text = RIGHT(@text, (LEN(@text) - @index - len(@delimiter) +1)) 
        END
      RETURN
    END

称呼它

SELECT * 
FROM DATA d 
INNER JOIN dbo.sp_Split('1,2,3,4,5,6,7,8,99,999,3000', ',') sp_Split ON 
d.Cust_ID_List = sp_Split.[value]
© www.soinside.com 2019 - 2024. All rights reserved.