假设我有一个像这样的存储过程:
CREATE PROCEDURE People_Select
@LastName nvarchar(25) = NULL,
@FirstName nvarchar(25) = NULL,
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM People
WHERE (@LastName IS NULL OR (LastName = @LastName))
AND (@FirstName IS NULL OR (FirstName = @FirstName))
OPTION (RECOMPILE)
END
当它被执行并设置了至少一个(或两个)参数时,它可以完美地工作。但是,如果有人碰巧在没有设置任何参数的情况下调用它,它将返回 People 表中的所有行。这是有问题的,特别是如果我的 People 表有数百万条记录。
如果未设置任何参数,首选功能(在我的情况下)将是它不返回任何内容。我可以很容易地检查 lastName 是否为 null 并且 firstname 是否为 null 并且什么都不返回,但是有没有更优雅的方法呢?如果我的存储过程有 20 个可选参数怎么办?我不想先检查它们是否全部为空并且什么也不返回。有没有更简单的方法?谢谢。