指定参数的默认值

通过为可选参数指定默认值,可创建带有可选参数的存储过程。执行该存储过程时,如果未指定其他值,则使用默认值。

如果在存储过程中没有指定参数的默认值,并且调用程序也没有在执行存储过程时为该参数提供值,那么会返回系统错误,因此指定默认值是必要的。

如果不能为参数指定合适的默认值,则可以指定 NULL 作为参数的默认值,并在未提供参数值而执行存储过程的情况下,使存储过程返回一条自定义消息。

注意注意

如果默认值是包含嵌入空格或标点符号的字符串,或者以数字开头(例如,6xxx),那么该默认值必须用直的单引号引起来。

示例

下列示例创建带有一个输入参数 @SalesPerson 的 usp_GetSalesYTD 过程。NULL 被指定为该参数的默认值并在错误处理语句中使用,以便在未指定 @SalesPerson 参数值的情况下执行存储过程时返回自定义错误消息。

USE AdventureWorks2008R2;
GO
IF OBJECT_ID('Sales.uspGetSalesYTD', 'P') IS NOT NULL
    DROP PROCEDURE Sales.uspGetSalesYTD;
GO
CREATE PROCEDURE Sales.uspGetSalesYTD
@SalesPerson nvarchar(50) = NULL  -- NULL default value
AS 
    SET NOCOUNT ON; 

-- Validate the @SalesPerson parameter.
IF @SalesPerson IS NULL
BEGIN
   PRINT 'ERROR: You must specify the last name of the sales person.'
   RETURN
END
-- Get the sales for the specified sales person and 
-- assign it to the output parameter.
SELECT SalesYTD
FROM Sales.SalesPerson AS sp
JOIN HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID
WHERE LastName = @SalesPerson;
RETURN
GO

下列示例执行存储过程。第一个语句执行存储过程,而未指定输入值。这将导致存储过程中的错误处理语句返回自定义错误消息。第二个语句提供了输入值,所以返回了所需的结果集。

-- Run the stored procedure without specifying an input value.
EXEC Sales.usp_GetSalesYTD;
GO
-- Run the stored procedure with an input value.
EXEC Sales.usp_GetSalesYTD N'Blythe';
GO

下列示例显示三个参数 @first@second@third 均有默认值的过程 my_proc,以及在用其他参数值执行该存储过程时所显示的值:

IF OBJECT_ID('dbo.my_proc', 'P') IS NOT NULL
    DROP PROCEDURE dbo.my_proc;
GO
CREATE PROCEDURE dbo.my_proc
    @first int = NULL,  -- NULL default value
    @second int = 2,    -- Default value of 2
    @third int = 3      -- Default value of 3
AS 
    SET NOCOUNT ON;
    SELECT @first, @second, @third;
GO
EXECUTE dbo.my_proc; -- No parameters supplied
GO

下面是结果集:

NULL  2  3

EXECUTE dbo.my_proc 10, 20, 30;-- All parameters supplied
GO

下面是结果集:

10  20  30

EXECUTE dbo.my_proc @second = 500;  -- Only second parameter supplied by name
GO

下面是结果集:

NULL  500  3

EXECUTE dbo.my_proc 40, @third = 50 -- Only first and third parameters
                                    -- are supplied.

下面是结果集:

40  2  50