然后设置 Select

Set then Select

有人可以帮我完成这个简单的(但我不知道怎么做)任务吗?

为了避免浪费时间修复每一行,我正在尝试做这样的事情

    SET @auditor = a, b, c;

    SELECT *
    FROM Audits
    WHERE auditor in (@auditor)

我的查询确实很长,这部分"WHERE auditor in (@auditor)"会重复。因此,先做某种Set会在劳动力发生一些变化时更新更快(我们聘请"d" and/or "b" left)

提前致谢

我建议在您的查询顶部使用临时 table:

CREATE TEMPORARY TABLE FilteredAudits AS (SELECT * FROM Audits WHERE Auditor IN (a,b,c))

然后根据需要将 Audits 替换为 FilteredAudits

这种方法的好处是您保证过滤器只会应用一次,这意味着查询的其余部分将 JOIN 到尽可能小的数据集,并且您不必重复IN() 在整个查询中过滤。

您可以使用数组变量和 FIND_IN_SET

SET @auditors = 'a,b,c';

SELECT *
FROM Audits
WHERE FIND_IN_SET(auditor,@auditors)

说明: FIND_IN_SET(auditor,@auditors) 如果在 @auditors 中找到审计员,则为真,在这种情况下,它 returns 索引。

但我会考虑将审核员保存在单独的 table 而不是变量中,以便更好地跟踪他们。

您不能像数组一样设置参数。你将不得不做类似

的事情

设置@auditor='a,b,c'

现在,如果 auditor 是一个数字,这应该可以工作,但如果它是任何其他数字,那么您将必须创建一个函数 dbo。[tfn_SplitList] 在您的系统上,您将像下面那样使用它

auditor in(select 来自 dbo 的列表。[tfn_SplitList](@auditor ,','))