Ωme*_*Man 1 sql-server stored-procedures azure-sql-database top
如何拥有一个允许消费者有选择地指定返回行数的存储过程?
如果未指定行数,则返回所有行。
“最简单”的方法是参数化 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
Run Code Online (Sandbox Code Playgroud)
请小心,因为您可以在此处引入参数嗅探症状。
如果您查看这两者的计划,就会发现两者的 TOP 运算符都期望 one row。
无论 top 的哪个输入首先执行,都将被缓存,除非您重新编译或添加 OPTIMIZE FOR 提示。
您还应该意识到添加 TOP 运算符可能会引入行目标。