Angeben eines Standardwerts für einen Parameter

Sie können eine gespeicherte Prozedur mit optionalen Parametern erstellen, indem Sie einen Standardwert für die optionalen Parameter angeben. Wird die gespeicherte Prozedur ausgeführt, wird der Standardwert verwendet, falls kein anderer Wert angegeben wurde.

Das Angeben von Standardwerten ist erforderlich, da ein Systemfehler zurückgegeben wird, wenn für einen Parameter kein Standardwert in der gespeicherten Prozedur angegeben wurde und das aufrufende Programm beim Ausführen der gespeicherten Prozedur keinen Wert für den Parameter bereitstellt.

Wenn kein geeigneter Wert als Standardwert für den Parameter angegeben werden kann, können Sie NULL als Standard für einen Parameter angeben und festlegen, dass die gespeicherte Prozedur eine benutzerdefinierte Meldung zurückgibt, wenn sie ausgeführt wird, ohne dass ein Wert für den Parameter bereitgestellt wurde.

HinweisHinweis

Wenn es sich bei dem Standardwert um eine Zeichenfolge handelt, die eingebettete Leerzeichen oder Satzzeichen enthält oder mit einer Zahl beginnt (z. B. 6xxx), muss der Wert in einfache, gerade Anführungszeichen eingeschlossen werden.

Beispiele:

Im folgenden Beispiel wird die gespeicherte Prozedur usp_GetSalesYTD mit einem Eingabeparameter (@SalesPerson) ausgeführt. NULL wird als Standardwert für den Parameter zugewiesen und in Fehlerbehandlungsanweisungen in dem Fall zum Zurückgeben einer benutzerdefinierten Fehleranweisung verwendet, wenn die gespeicherte Prozedur ohne einen Wert für den Parameter @SalesPerson ausgeführt wird.

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

Im folgenden Beispiel wird die gespeicherte Prozedur ausgeführt. Die erste Anweisung führt die gespeicherte Prozedur ohne Angabe eines Eingabewertes aus. Dies bewirkt, dass die Fehlerbehandlungsanweisungen in der gespeicherten Prozedur die benutzerdefinierte Fehlermeldung zurückgeben. Die zweite Anweisung stellt einen Eingabewert zur Verfügung und gibt das erwartete Resultset zurück.

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

Das folgende Beispiel zeigt die my_proc-Prozedur mit Standardwerten für jeden der drei Parameter @first, @second und @third sowie die Werte, die angezeigt werden, wenn die gespeicherte Prozedur mit anderen Parameterwerten ausgeführt wird:

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

Dies ist das Resultset.

NULL  2  3

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

Dies ist das Resultset.

10  20  30

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

Dies ist das Resultset.

NULL  500  3

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

Dies ist das Resultset.

40  2  50