sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo arreglar "La declaración EXECUTE falló porque su cláusula WITH RESULT SETS especificó 1 conjunto (s) de resultados ..." en SQL Server

Si encuentra el mensaje de error 11535, nivel 16 al intentar ejecutar un procedimiento almacenado, es porque no definió suficientes conjuntos de resultados en WITH RESULT SETS cláusula.

Algunos procedimientos almacenados devuelven varios conjuntos de resultados. Cuando se usa WITH RESULT SETS cláusula, debe definir cada conjunto de resultados esperado. Debe hacer esto incluso si solo desea cambiar la definición de uno o algunos de los conjuntos de resultados.

Para corregir este error, simplemente agregue los conjuntos de resultados adicionales a WITH RESULT SETS cláusula, cada una separada por una coma.

También puede solucionarlo eliminando WITH RESULT SETS cláusula, pero asumiré que lo está utilizando por una razón (es decir, necesita redefinir el conjunto de resultados devuelto por el procedimiento).

Ejemplo de código que causa el error

Supongamos que tenemos un procedimiento almacenado que devuelve tres conjuntos de resultados.

EXEC sp_getCityStateCountryByCityId @CityId = 1;

Resultado:

+------------+----------------------------+-----------------------------+
| CityName   | LatestRecordedPopulation   | ValidFrom                   |
|------------+----------------------------+-----------------------------|
| Aaronsburg | 613                        | 2013-01-01 00:00:00.0000000 |
+------------+----------------------------+-----------------------------+
(1 row affected)
+---------------------+---------------------+----------------------------+
| StateProvinceCode   | StateProvinceName   | LatestRecordedPopulation   |
|---------------------+---------------------+----------------------------|
| PA                  | Pennsylvania        | 13284753                   |
+---------------------+---------------------+----------------------------+
(1 row affected)
+-----------------+---------------+----------------------------+
| IsoAlpha3Code   | CountryName   | LatestRecordedPopulation   |
|-----------------+---------------+----------------------------|
| USA             | United States | 313973000                  |
+-----------------+---------------+----------------------------+
(1 row affected)

Y digamos que queremos usar WITH RESULT SETS cláusula para redefinir las columnas de solo el primer conjunto de resultados.

Hacerlo con el siguiente código producirá un error.

EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS   
(  
    (
        [City] nvarchar(50),
        [Population] int,
        [Valid From] date
    )
);

Resultado:

Msg 11535, Level 16, State 1, Procedure sp_getCityStateCountryByCityId, Line 14
EXECUTE statement failed because its WITH RESULT SETS clause specified 1 result set(s), and the statement tried to send more result sets than this.

Esto se debe a que no incluimos los otros conjuntos de resultados en WITH RESULT SETS cláusula.

La solución

La solución es incluir los otros conjuntos de resultados en WITH RESULT SETS cláusula.

EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS   
(  
    (
        [City] nvarchar(50),
        [Population] int,
        [Valid From] date
    ),
    (
        [State Code] nvarchar(5),
        [State Name] nvarchar(50),
        [Population] int
    ),
    (
        [Country Code] nvarchar(3),
        [Country Name] nvarchar(60),
        [Population] int
    )
);

Resultado:

+------------+--------------+--------------+
| City       | Population   | Valid From   |
|------------+--------------+--------------|
| Aaronsburg | 613          | 2013-01-01   |
+------------+--------------+--------------+
(1 row affected)
+--------------+--------------+--------------+
| State Code   | State Name   | Population   |
|--------------+--------------+--------------|
| PA           | Pennsylvania | 13284753     |
+--------------+--------------+--------------+
(1 row affected)
+----------------+----------------+--------------+
| Country Code   | Country Name   | Population   |
|----------------+----------------+--------------|
| USA            | United States  | 313973000    |
+----------------+----------------+--------------+
(1 row affected)

El problema ya se ha solucionado.