Freigeben über


Vorgehensweise: Abrufen von Ausgabeparametern

In diesem Thema wird gezeigt, wie eine gespeicherte Prozedur aufgerufen wird, in der ein Parameter als Ausgabeparameter definiert wurde. Beim Abrufen eines Ausgabe- oder Eingabe-/Ausgabeparameters ist zu beachten, dass alle von der gespeicherten Prozedur zurückgegebenen Ergebnisse erst zugänglich sind, nachdem sie vom Consumer verarbeitet wurden.

Hinweis

Variablen, die mit null, DateTime oder Datenstromtypen initialisiert oder aktualisiert werden, können nicht als Ausgabeparameter verwendet werden.

Beispiel

Im folgenden Beispiel wird eine gespeicherte Prozedur aufgerufen, die für einen gegebenen Mitarbeiter die Verkaufszahlen des laufenden Jahres zurückgibt. Die PHP-Variable $lastName ist ein Eingabeparameter, und $salesYTD ist ein Ausgabeparameter.

Hinweis

Durch die Initialisierung von $salesYTD mit 0.0 wird der Rückgabetyp PHPTYPE auf float festgelegt. Um die Datentypintegrität sicherzustellen, sollten Ausgabeparameter vor dem Aufruf der gespeicherten Prozedur initialisiert oder es sollte der gewünschte Typ für PHPTYPE angegeben werden. Informationen zur Festlegung des Typs für PHPTYPE finden Sie unter Vorgehensweise: Angeben von PHP-Datentypen.

Weil die gespeicherte Prozedur nur ein Ergebnis zurückgibt, enthält $salesYTD unmittelbar nach der Ausführung der gespeicherten Prozedur den Rückgabewert des Ausgabeparameters.

Hinweis

Es wird empfohlen, zum Aufruf gespeicherter Prozeduren die kanonische Syntax zu verwenden. Weitere Informationen zur kanonischen Syntax finden Sie unter Aufrufen einer gespeicherten Prozedur.

Im Beispiel wird davon ausgegangen, dass SQL Server und die AdventureWorks-Datenbank auf dem lokalen Computer installiert sind. Alle Ausgaben werden in die Konsole geschrieben, wenn das Beispiel über die Befehlszeile ausgeführt wird.

<?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);
?>

Siehe auch

Aufgaben

Vorgehensweise: Angeben der Parameterrichtung
Vorgehensweise: Abrufen von Eingabe-/Ausgabeparametern

Weitere Ressourcen

Abrufen von Daten