我有一些数据想从我们的 SQL 服务器中提取出来。
这个旧数据库没有与之关联的任何主键,因此提取数据就像查询 Excel 电子表格(它实际上起源于几年前)。
不过,我需要对此数据运行报告。
目前,我获得了给定时间段内不同序列号的列表,然后提取给定序列号的所有记录。对于 1 个月的时间范围,这可以是 1500 到 3000 个序列号。序列号字段的格式为char(20)
,即使序列号只有 15 个字符长。
开始更新
- 此表中通常有 5 到 15 个条目,每个
Serial_Number
. - 最多有 10 台机器向该表写入数据,因此
Date_Time
可能有相同的值
结束更新
此过程需要一段时间,但在列表中的不同序列号之间,我可以使用进度条更新 Windows 窗体,以便管理层知道正在发生的事情以及预计需要多长时间。
我总是试图让这个查询运行得更快。
现在,我正在考虑使用以下WHERE
子句提取我需要的数据:
SELECT Col1, Col2, Col3
FROM Table1
WHERE Serial_Number IN (
SELECT DISTINCT Serial_Number
FROM Table1
WHERE Date_Time Between @startDate AND @endDate
)
我的问题是:我会遇到什么问题,特别是因为我们在给定的时间范围内有这么多不同的序列号。
而且,当然,您知道管理部门的某个人会在无聊时尝试运行一年的数据!然后,他们将尝试运行自耶稣出生以来的数据,只是因为他们没有更好的事情可做。
重述问题:WHERE
子句的方法是否有限制IN
我可以传入的项目数量?