假设我有一个类似的存储过程:
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个可选参数怎么办?我不想先检查它们是否全为空并且不返回任何内容..有更简单的方法吗?感谢。
答案 0 :(得分:0)
尝试以下
CREATE PROCEDURE People_Select
@LastName nvarchar(25) = NULL,
@FirstName nvarchar(25) = NULL,
AS
BEGIN
IF @LastName is null and @FirstName is null
goto end_section:
SET NOCOUNT ON;
SELECT *
FROM People
WHERE (@LastName IS NULL OR (LastName = @LastName))
AND (@FirstName IS NULL OR (FirstName = @FirstName))
OPTION (RECOMPILE)
end_section:
END