ΩmegaMan Asked: 2018-03-28 16:43:34 +0800 CST2018-03-28 16:43:34 +0800 CST 2018-03-28 16:43:34 +0800 CST 具有可选参数的存储过程限制返回的行(如果指定) 772 如何让一个存储过程允许消费者有选择地指定返回的行数? 如果未指定行数,则返回所有行。 sql-server stored-procedures 1 个回答 Voted Best Answer Erik Darling 2018-03-28T17:52:13+08:002018-03-28T17:52:13+08:00 “最简单”的方法是参数化 TOP 的输入。我使用的数字是 BIGINT 的最大值。您可能永远不会有比查询返回的行更多的行。 USE master GO CREATE PROCEDURE dbo.Limiter (@Top BIGINT = 9223372036854775807) AS BEGIN SELECT TOP (@Top) * FROM sys.databases END EXEC dbo.Limiter @Top = 1 EXEC dbo.Limiter 请小心,因为您可以在此处引入参数嗅探症状。 如果您查看这两者的计划,则两者的 TOP 运算符都需要一行。 top 的输入首先执行的将被缓存,除非您重新编译或添加 OPTIMIZE FOR 提示。 您还应该知道添加 TOP 运算符可能会引入行目标。
“最简单”的方法是参数化 TOP 的输入。我使用的数字是 BIGINT 的最大值。您可能永远不会有比查询返回的行更多的行。
请小心,因为您可以在此处引入参数嗅探症状。
如果您查看这两者的计划,则两者的 TOP 运算符都需要一行。
top 的输入首先执行的将被缓存,除非您重新编译或添加 OPTIMIZE FOR 提示。
您还应该知道添加 TOP 运算符可能会引入行目标。