检查过程参数是否全为NULL的最简单方法是什么?

时间:2013-06-06 14:39:02

标签: sql-server tsql stored-procedures

假设我有一个类似的存储过程:

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个可选参数怎么办?我不想先检查它们是否全为空并且不返回任何内容..有更简单的方法吗?感谢。

1 个答案:

答案 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