【发布时间】:2018-04-03 09:22:13
【问题描述】:
是否可以开发一个在达到特定条件后可以退出/停止执行的 SQL Server 2016 查询?
我们开发了一个存储过程,该过程仅在SELECT 语句返回的不同记录计数小于 10K 时才返回数据。因此,该过程首先获取不同值的计数,然后运行SELECT 语句以获取要返回的实际数据。如果计数返回超过 10K,它将简单地返回计数,而不是再次运行查询来获取实际数据。
该表在生产中有接近8000万条记录,对于某些输入参数,当结果少于10K条记录时,它会在10-15秒内返回结果。
对于某些输入参数,该过程将运行近 4-5 分钟,并返回大约 15-20 百万的计数作为输出。
我正在寻找一种在计数查询到达第 10001 条记录时强制停止计数查询的方法。
存储过程看起来像这样(在实际过程中,select 语句将在WHERE 子句中有多个条件):
DECLARE @Count BIGINT
SELECT @Count = COUNT(DISTINCT ZIP)
FROM dbo.Member (NOLOCK)
WHERE FirstName = @FirstName
IF @Count < 10001
BEGIN
SELECT *
FROM dbo.Member
WHERE FirstName = @FirstName
END
ELSE
BEGIN
SELECT @Count --When Count is greater than 10K, returns just count
END
谢谢
【问题讨论】:
-
你的意思是像:SELECT TOP 10000 column_name(s) FROM table_name WHERE 条件; ?还是我没有看到另一个问题?
-
MemberNumber真的重复了吗? -
@Koksalb 仅当 SELECT 查询返回的记录少于 10K 时,该过程才应返回数据。如果记录超过 10K,则该过程不应返回数据,而应仅返回计数而不是数据。所以 TOP 关键字对我没有帮助。
-
@GordonLinoff 我给出的查询只是举例。我编辑了查询以计算 ZIP 而不是会员编号。希望它现在更有意义。谢谢
标签: sql sql-server database tsql sql-server-2016