指定參數預設值

只要為參數指定預設值,就可以建立含選擇性參數的預存程序。執行預存程序時,如果未指定其他數值,就會使用預設值。

指定預設值是必要的,因為如果預存程序中未指定參數的預設值,而呼叫程式在執行預存程序時也未提供參數的話,就會傳回系統錯誤。

如果無法指定適當的數值做為參數的預設值,您可以指定 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

以下範例示範 my_proc 程序,並顯示值。它的三個參數 @first@second@third 各有預設值,但是在執行預存程序時指定其他參數值:

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