在SQL中创建可用的逗号分隔的INT列表变量

时间:2016-02-04 17:04:20

标签: sql sql-server

尝试创建一个声明存储逗号分隔的int列表的变量的查询,然后在WHERE语句中重新使用该列表。参数必须以IN(int,int,int)等格式传递,并且总是会根据@TG的值而改变。以下是我到目前为止:

DECLARE @TG int = 14168

DECLARE @TG_ITEMS varchar =  (SELECT  
                             STUFF((SELECT DISTINCT  
                                ',' + CONVERT(varchar(10),  i.item_key, 120)
                                    FROM store__tracking_group sitg
                                    JOIN store_tracking_group_detail sit 
                                    JOIN item i 
                                    WHERE sitg.number IN (@TG)  
                                    FOR XML PATH ('')), 1, 1, ''))




--- MAIN QUERY HERE

SELECT ''
FROM ''
WHERE 'xx' IN (@TG_ITEMS)

1 个答案:

答案 0 :(得分:2)

错误的做法。 SQL数据库具有用于存储列表的出色数据结构。它被称为,而不是字符串。

在精神上做你想要的一种方法是表变量:

DECLARE @TG int = 14168;

DECLARE @TG_ITEMS TABLE (item_key int);

INSERT INTO @TG_ITEMS(item_key)
    SELECT DISTINCT i.item_key
    FROM store__tracking_group sitg JOIN
         store_tracking_group_detail sit 
         ON ??? JOIN
         item i 
         ON ???
    WHERE sitg.number = @TG; 

SELECT ''
FROM ''
WHERE 'xx' IN (SELECT item_key FROM @TG_ITEMS);

这有许多好处,例如可读性和性能。