Sql-Server

帶有可選參數限制行的儲存過程(如果指定)

  • March 28, 2018

如何擁有一個允許消費者有選擇地指定返回的行數的儲存過程?

如果未指定行數,則返回所有行。

“最簡單”的方法是將輸入參數化為 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 運算符都需要一行

除非您重新編譯或添加 OPTIMIZE FOR 提示,否則首先執行 top 的任何輸入都將被記憶體。

您還應該知道添加 TOP 運算符可能會引入行目標

引用自:https://dba.stackexchange.com/questions/202470