指定參數預設值
只要為參數指定預設值,就可以建立含選擇性參數的預存程序。執行預存程序時,如果未指定其他數值,就會使用預設值。
指定預設值是必要的,因為如果預存程序中未指定參數的預設值,而呼叫程式在執行預存程序時也未提供參數的話,就會傳回系統錯誤。
如果無法指定適當的數值做為參數的預設值,您可以指定 NULL 做為參數的預設值,讓預存程序在沒有參數值的狀況下執行時,會傳回自訂的訊息。
[!附註]
如果預設值是包含內嵌空白或標點的字串,或是以數字開頭 (例如 6xxx),就必須將它括在單引號中。
範例
下列範例使用一個輸入參數 @SalesPerson 來建立 usp_GetSalesYTD 程序。將 NULL 做為預設值指派給參數,並用於錯誤處理陳述式,以便在未指定值給 @SalesPerson 參數而執行預存程序時,傳回自訂錯誤訊息。
USE AdventureWorks;
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.EmployeeID = sp.SalesPersonID
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