尝试创建一个声明存储逗号分隔的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)
答案 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);
这有许多好处,例如可读性和性能。