sql >> Database >  >> RDS >> Sqlserver

Hoe te repareren "EXECUTE-instructie is mislukt omdat de WITH RESULT SETS-clausule 1 resultaatset (s) heeft gespecificeerd ..." in SQL Server

Als u foutbericht 11535, niveau 16 tegenkomt terwijl u probeert een opgeslagen procedure uit te voeren, komt dat omdat u niet genoeg resultaatsets hebt gedefinieerd in de WITH RESULT SETS clausule.

Sommige opgeslagen procedures retourneren meerdere resultaatsets. Bij gebruik van de WITH RESULT SETS clausule, moet u elke set met verwachte resultaten definiëren. U moet dit zelfs doen als u alleen de definitie van een of enkele resultaatsets wilt wijzigen.

Om deze fout op te lossen, voegt u gewoon de extra resultatensets toe aan de WITH RESULT SETS clausule, elk gescheiden door een komma.

U kunt het ook oplossen door de WITH RESULT SETS . te verwijderen clausule, maar ik neem aan dat je het met een reden gebruikt (d.w.z. je moet de resultatenset die door de procedure wordt geretourneerd) opnieuw definiëren.

Voorbeeld van code die de fout veroorzaakt

Stel dat we een opgeslagen procedure hebben die drie resultaatsets retourneert.

EXEC sp_getCityStateCountryByCityId @CityId = 1;

Resultaat:

+------------+----------------------------+-----------------------------+
| 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)

En stel dat we de WITH RESULT SETS . willen gebruiken om de kolommen van alleen de eerste resultaatset opnieuw te definiëren.

Als je het met de volgende code doet, krijg je een fout.

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

Resultaat:

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.

Dit komt omdat we de andere resultatensets niet hebben opgenomen in de WITH RESULT SETS clausule.

De oplossing

De oplossing is om de andere resultatensets op te nemen in de WITH RESULT SETS clausule.

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

Resultaat:

+------------+--------------+--------------+
| 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)

Het probleem is nu verholpen.


  1. Hoe te repareren "De selectielijst voor de INSERT-instructie bevat minder items dan de invoeglijst"

  2. SQL Server-afstemming - het draait allemaal om meten

  3. Hoe kan ik het MySQL-enginetype voor een specifieke tabel controleren?

  4. Vervang enkele aanhalingstekens in SQL Server