【发布时间】:2014-07-28 17:48:52
【问题描述】:
有没有办法将 WHERE 子句语句存储为可调用变量?
我需要使用不同的“日期”和“ID”值运行大约 20 次以下查询,但“代码”值将保持不变。但是,在 20 次查询之后,我需要将“代码”值更改为另一组值并使用相同的 20 个“日期”和“ID”组合。
我正在使用 SQL Server Management Studio 2012。
编辑:这实际上是一个子查询,我可以计算由此产生的记录数。每个计数查询都与其他计数查询联合,因此我可以一次执行所有查询并让结果显示 1 列的计数。我想知道如何制作一个包含每列特定于“代码”集的结果的 excel 表,但我还没有研究过。
SELECT DISTINCT a,b,c
FROM mytable
WHERE (Code BETWEEN '201' AND '205') OR (Code BETWEEN '211' AND '215') OR (Code BETWEEN '241' AND '245') OR (Code = '450')
OR (Code BETWEEN '381' AND '387') OR (Code BETWEEN '391' AND '397') OR (Code BETWEEN '401' AND '420') OR (Code BETWEEN '441' AND '444')
OR (Code BETWEEN '358' AND '360') OR (Code BETWEEN '371' AND '937') OR (Code = '499') OR (Code BETWEEN '218' AND '239'))
AND (Date > '20101231' AND Date < '20120101')
AND (ID IN ('3','6','7'))
我的代码值如何变化:
WHERE (Code IN ('791','792'))
OR (Code BETWEEN '801' AND '899')
OR (Code BETWEEN '101' AND '125')
OR (Code BETWEEN '401' AND '429')
WHERE (Code BETWEEN '281' AND '749') OR Code = '2037'
还有另外2个代码列表,共5个,涉及BETWEEN、IN和=语句。如果有帮助,我也可以发布这些,但它们遵循与上述相同的声明方式。
日期值适用于日历年或季度。 ID 值通过 IN、NOT IN 或 = 表示。它们都是 char、varchar、tinyint 或 date。
替代方案:我可以一遍又一遍地复制和粘贴代码,但我想提高我的编码能力。此外,查找和替换仅读取单行。我无法让它适用于多行,例如 WHERE 子句。我听说过正则表达式,但不知道如何使用它们来做我想做的事。
感谢您的帮助!
【问题讨论】:
-
为了我们的理解和更清楚,您能否提供您必须运行的两个不同的查询...我们看到上面的一个,您能否也证明另一个,以便我们更好地理解什么正在发生变化以及如何变化
-
SQL Server 中的“列表”或“数组”总是..... TABLE!这就是 SQL Server 的“多值”概念。因此,将您的值放入表中(临时表、表变量、表值参数),然后使用适当的 T-SQL 连接来获得您需要的内容。 不要重新发明轮子 - 它已经被发明了太多次......
-
感谢marc_s的解释!
标签: sql sql-server sql-server-2012 table-variable