Share via


Procédure : récupérer des paramètres de sortie

Cette rubrique montre comment appeler une procédure stockée dans laquelle un seul paramètre a été défini en tant que paramètre de sortie. Notez que lors de la récupération d'un paramètre de sortie ou d'entrée/de sortie, tous les résultats retournés par la procédure stockée doivent être traités avant que la valeur de paramètre retournée ne soit accessible.

Cc626303.note(fr-fr,SQL.90).gifRemarque :
Les variables qui ont pour valeur initiale ou mise à jour null, DateTime ou des types de flux ne peuvent pas être utilisées en tant que paramètres de sortie.

Exemple

L'exemple suivant appelle une procédure stockée qui retourne les ventes réalisées depuis le début de l'année par un employé spécifique. La variable PHP $lastName est un paramètre d'entrée et $salesYTD est un paramètre de sortie.

Cc626303.note(fr-fr,SQL.90).gifRemarque :
L'initialisation de $salesYTD à 0.0 définit le PHPTYPE retourné à float. Pour garantir l'intégrité du type de données, les paramètres de sortie doivent être initialisés avant l'appel de la procédure stockée ; à défaut, le PHPTYPE souhaité doit être spécifié. Pour plus d'informations sur la spécification de PHPTYPE, consultez Procédure : spécifier les types de données PHP.

Dans la mesure où un seul résultat est retourné par la procédure stockée, $salesYTD contient la valeur retournée par le paramètre de sortie immédiatement après l'exécution de la procédure stockée.

Cc626303.note(fr-fr,SQL.90).gifRemarque :
L'appel des procédures stockées à l'aide de la syntaxe canonique est la pratique recommandée. Pour plus d'informations sur la syntaxe canonique, consultez Appel d'une procédure stockée.

L'exemple suppose que SQL Server et la base de données AdventureWorks sont installés sur l'ordinateur local. Toutes les données de sortie sont écrites dans la console lorsque l'exemple est exécuté à partir de la ligne de commande.

<?php
/* Connect to the local server using Windows Authentication and 
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
     echo "Could not connect.\n";
     die( print_r( sqlsrv_errors(), true));
}

/* Drop the stored procedure if it already exists. */
$tsql_dropSP = "IF OBJECT_ID('GetEmployeeSalesYTD', 'P') IS NOT NULL
                DROP PROCEDURE GetEmployeeSalesYTD";
$stmt1 = sqlsrv_query( $conn, $tsql_dropSP);
if( $stmt1 === false )
{
     echo "Error in executing statement 1.\n";
     die( print_r( sqlsrv_errors(), true));
}

/* Create the stored procedure. */
$tsql_createSP = " CREATE PROCEDURE GetEmployeeSalesYTD
                   @SalesPerson nvarchar(50),
                   @SalesYTD money OUTPUT
                   AS
                   SELECT @SalesYTD = SalesYTD
                   FROM Sales.SalesPerson AS sp
                   JOIN HumanResources.vEmployee AS e 
                   ON e.EmployeeID = sp.SalesPersonID
                   WHERE LastName = @SalesPerson";
$stmt2 = sqlsrv_query( $conn, $tsql_createSP);
if( $stmt2 === false )
{
     echo "Error in executing statement 2.\n";
     die( print_r( sqlsrv_errors(), true));
}

/*--------- The next few steps call the stored procedure. ---------*/

/* Define the Transact-SQL query. Use question marks (?) in place of
 the parameters to be passed to the stored procedure */
$tsql_callSP = "{call GetEmployeeSalesYTD( ?, ? )}";

/* Define the parameter array. By default, the first parameter is an
INPUT parameter. The second parameter is specified as an OUTPUT
parameter. Initializing $salesYTD to 0.0 sets the returned PHPTYPE to
float. To ensure data type integrity, output parameters should be
initialized before calling the stored procedure, or the desired
PHPTYPE should be specified in the $params array.*/
$lastName = "Blythe";
$salesYTD = 0.0;
$params = array( 
                 array($lastName, SQLSRV_PARAM_IN),
                 array($salesYTD, SQLSRV_PARAM_OUT)
               );

/* Execute the query. */
$stmt3 = sqlsrv_query( $conn, $tsql_callSP, $params);
if( $stmt3 === false )
{
     echo "Error in executing statement 3.\n";
     die( print_r( sqlsrv_errors(), true));
}

/* Display the value of the output parameter $salesYTD. */
echo "YTD sales for ".$lastName." are ". $salesYTD. ".";

/*Free the statement and connection resources. */
sqlsrv_free_stmt( $stmt1);
sqlsrv_free_stmt( $stmt2);
sqlsrv_free_stmt( $stmt3);
sqlsrv_close( $conn);
?>

Voir aussi

Tâches

Procédure : spécifier la direction du paramètre
Procédure : récupérer des paramètres d'entrée/de sortie

Autres ressources

Récupération des données