Compartir a través de


Cómo trabajar con varios conjuntos de resultados

El Controlador de SQL Server para PHP proporciona la función sqlsrv_next_result que activa el siguiente resultado (conjunto de resultados, recuento de filas o parámetro de salida) de una instrucción. En este tema se muestra cómo usar sqlsrv_next_result para moverse de un resultado a otro, en una consulta de proceso por lotes. Para obtener un ejemplo de cómo recuperar un parámetro de salida que devuelve un procedimiento almacenado, vea sqlsrv_next_result.

Ejemplo

En el ejemplo siguiente se ejecuta una consulta de proceso por lotes que recupera información de revisión del producto de un identificador de producto especificado, inserta una revisión del producto y, a continuación, vuelve a recuperar la información de revisión del producto para el identificador de producto especificado. La revisión del producto que se acaba de insertar se incluirá en el conjunto de resultados final de la consulta de proceso por lotes. En el ejemplo se usa sqlsrv_next_result para moverse de un resultado a otro, en la consulta de proceso por lotes.

Nota

El primer, o único, resultado que devuelve una consulta de proceso por lotes o procedimiento almacenado se activa sin llamar a sqlsrv_next_result.

En el ejemplo se usa la tabla Purchasing.ProductReview de la base de datos AdventureWorks y se supone que esta base de datos está instalada en el servidor. Todos los resultados se escriben en la consola cuando el ejemplo se ejecuta desde la línea de comandos.

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

/* Define the batch query. */
$tsql = "--Query 1
         SELECT ProductID, ReviewerName, Rating 
         FROM Production.ProductReview 
         WHERE ProductID=?;

         --Query 2
         INSERT INTO Production.ProductReview (ProductID, 
                                               ReviewerName, 
                                               ReviewDate, 
                                               EmailAddress, 
                                               Rating)
         VALUES (?, ?, ?, ?, ?);

         --Query 3
         SELECT ProductID, ReviewerName, Rating 
         FROM Production.ProductReview 
         WHERE ProductID=?;";

/* Assign parameter values and execute the query. */
$params = array(798, 
                798, 
                'CustomerName', 
                '2008-4-15', 
                'test@customer.com', 
                3, 
                798 );
$stmt = sqlsrv_query($conn, $tsql, $params);
if( $stmt === false )
{
     echo "Error in statement execution.\n";
     die( print_r( sqlsrv_errors(), true));
}

/* Retrieve and display the first result. */
echo "Query 1 result:\n";
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC ))
{
     print_r($row);
}

/* Move to the next result of the batch query. */
sqlsrv_next_result($stmt);

/* Display the result of the second query. */
echo "Query 2 result:\n";
echo "Rows Affected: ".sqlsrv_rows_affected($stmt)."\n";

/* Move to the next result of the batch query. */
sqlsrv_next_result($stmt);

/* Retrieve and display the third result. */
echo "Query 3 result:\n";
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC ))
{
     print_r($row);
}

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

Vea también

Tareas

Aplicación de ejemplo

Conceptos

Acerca de ejemplos de código en la documentación

Otros recursos

Recuperar datos
Actualizar datos (Controlador de SQL Server para PHP)
Referencia de la API (Controlador SQL Server para PHP)