sqlsrv_next_result

Aktiviert das nächste Ergebnis (Resultset, Zeilenanzahl oder Ausgabeparameter) der angegebenen Anweisung.

Hinweis

Das erste (oder einzige) von einer Batchabfrage oder gespeicherten Prozedur zurückgegebene Ergebnis ist aktiv, ohne dass sqlsrv_next_result aufgerufen wird.

Syntax

sqlsrv_next_result( resource $stmt )

Parameter

$stmt: Die ausgeführte Anweisung, nach der das nächste Ergebnis aktiviert wird.

Rückgabewert

Wenn das nächste Ergebnis erfolgreich aktiviert wurde, wird der boolesche Wert true zurückgegeben. Wenn beim Aktivieren des nächsten Ergebnisses ein Fehler auftrat, wird false zurückgegeben. Wenn keine weitere Ergebnisse verfügbar sind, wird null zurückgegeben.

Beispiel

Im folgenden Beispiel wird eine gespeicherte Prozedur erstellt und ausgeführt, die eine Produktbewertung in die Production.ProductReview-Tabelle einfügt und dann alle Bewertungen für das angegebene Produkt abruft. Nach der Ausführung der gespeicherten Prozedur wird das erste Ergebnis (die Anzahl von Zeilen, auf die sich die INSERT-Abfrage in der gespeicherten Prozedur auswirkt) verarbeitet, ohne sqlsrv_next_result aufzurufen. Das nächste Ergebnis (die Anzahl von Zeilen, die von der SELECT-Abfrage in der gespeicherten Prozedur zurückgegeben werden) wird durch einen Aufruf von sqlsrv_next_result verfügbar gemacht und mithilfe von sqlsrv_fetch_array verarbeitet.

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('InsertProductReview', 'P') IS NOT NULL
                DROP PROCEDURE InsertProductReview";
$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 InsertProductReview
                                    @ProductID int,
                                    @ReviewerName nvarchar(50),
                                    @ReviewDate datetime,
                                    @EmailAddress nvarchar(50),
                                    @Rating int,
                                    @Comments nvarchar(3850)
                   AS
                       BEGIN
                             INSERT INTO Production.ProductReview 
                                         (ProductID,
                                          ReviewerName,
                                          ReviewDate,
                                          EmailAddress,
                                          Rating,
                                          Comments)
                                    VALUES
                                         (@ProductID,
                                          @ReviewerName,
                                          @ReviewDate,
                                          @EmailAddress,
                                          @Rating,
                                          @Comments);
                             SELECT * FROM Production.ProductReview
                                WHERE ProductID = @ProductID;
                       END";
$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 InsertProductReview(?, ?, ?, ?, ?, ?)}";

/* Define the parameter array. */
$productID = 709;
$reviewerName = "Customer Name";
$reviewDate = "2008-02-12";
$emailAddress = "customer@email.com";
$rating = 3;
$comments = "[Insert comments here.]";
$params = array( 
                 $productID,
                 $reviewerName,
                 $reviewDate,
                 $emailAddress,
                 $rating,
                 $comments
               );

/* 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));
}

/* Consume the first result (rows affected by INSERT query in the
stored procedure) without calling sqlsrv_next_result. */
echo "Rows affectd: ".sqlsrv_rows_affected($stmt3)."-----\n";

/* Move to the next result and display results. */
$next_result = sqlsrv_next_result($stmt3);
if( $next_result )
{
     echo "\nReview information for product ID ".$productID.".---\n";
     while( $row = sqlsrv_fetch_array( $stmt3, SQLSRV_FETCH_ASSOC))
     {
          echo "ReviewerName: ".$row['ReviewerName']."\n";
          echo "ReviewDate: ".date_format($row['ReviewDate'],
                                             "M j, Y")."\n";
          echo "EmailAddress: ".$row['EmailAddress']."\n";
          echo "Rating: ".$row['Rating']."\n\n";
     }
}
elseif( is_null($next_result))
{
     echo "No more results.\n";
}
else
{
     echo "Error in moving to next result.\n";
     die(print_r(sqlsrv_errors(), true));
}

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

Beim Ausführen einer gespeicherte Prozedur mit Ausgabeparametern wird empfohlen, dass alle Ergebnisse verarbeitet werden, bevor auf die Werte in den Ausgabeparametern zugegriffen wird. Weitere Informationen finden Sie unter Vorgehensweise: Angeben der Parameterrichtung.

Siehe auch

Konzepte

Informationen zu den Codebeispielen in der Dokumentation

Weitere Ressourcen

API-Referenz (SQL Server-Treiber für PHP)