Condividi tramite


Specifica di un valore di parametro predefinito

È possibile creare una stored procedure con parametri facoltativi specificando un valore predefinito per i parametri stessi. Quando la stored procedure viene eseguita, viene utilizzato il valore predefinito se non è stato specificato nessun altro valore.

La specifica di valori predefiniti è necessaria perché, se a un parametro non è stato assegnato un valore predefinito nella stored procedure e il programma che esegue la chiamata non specifica un valore per il parametro quando la stored procedure viene eseguita, verrà restituito un errore di sistema.

Se non è possibile specificare correttamente alcun valore predefinito per il parametro, è possibile specificare il valore NULL in modo che la stored procedure restituisca un messaggio personalizzato se viene eseguita senza un valore per il parametro.

Nota

Se il valore predefinito è una stringa di caratteri che include spazi vuoti o punteggiatura o se inizia con un numero (ad esempio, 6xxx), è necessario racchiuderlo tra virgolette singole.

Esempi

Nell'esempio seguente viene creata la procedura usp_GetSalesYTD con un parametro di input, @SalesPerson. NULL viene assegnato come valore predefinito per il parametro e utilizzato nelle istruzioni di gestione degli errori per restituire un messaggio di errore personalizzato nei casi in cui la stored procedure venga eseguita senza un valore per il parametro @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

Nell'esempio seguente viene eseguita la stored procedure. La prima istruzione esegue la stored procedure senza specificare un valore di input. Questo determina la restituzione del messaggio di errore personalizzato da parte delle istruzioni di gestione degli errori nella stored procedure. La seconda istruzione specifica un valore di input e restituisce il set di risultati previsto.

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

Nell'esempio seguente viene illustrata la stored procedure my_proc con i valori predefiniti per ognuno dei tre parametri @first, @second e @third e i valori visualizzati quando viene eseguita con altri valori dei parametri:

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

Set di risultati:

NULL  2  3

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

Set di risultati:

10  20  30

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

Set di risultati:

NULL  500  3

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

Set di risultati:

40  2  50