Se si verifica l'errore Msg 11535, livello 16 durante il tentativo di eseguire una procedura memorizzata, è perché non sono stati definiti set di risultati sufficienti in WITH RESULT SETS
clausola.
Alcune stored procedure restituiscono più set di risultati. Quando si utilizza WITH RESULT SETS
clausola, è necessario definire ogni set di risultati previsto. È necessario farlo anche se si desidera modificare solo la definizione di uno o alcuni dei set di risultati.
Per correggere questo errore, aggiungi semplicemente i set di risultati aggiuntivi a WITH RESULT SETS
clausola, ciascuna separata da una virgola.
Puoi anche risolverlo rimuovendo il WITH RESULT SETS
clausola, ma presumo che tu la stia utilizzando per un motivo (ad es. devi ridefinire il set di risultati restituito dalla procedura).
Esempio di codice che causa l'errore
Supponiamo di avere una procedura memorizzata che restituisce tre set di risultati.
EXEC sp_getCityStateCountryByCityId @CityId = 1;
Risultato:
+------------+----------------------------+-----------------------------+ | 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)
E diciamo che vogliamo usare il WITH RESULT SETS
clausola per ridefinire le colonne solo del primo set di risultati.
Farlo con il codice seguente produrrà un errore.
EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Risultato:
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.
Questo perché non abbiamo incluso gli altri set di risultati in WITH RESULT SETS
clausola.
La soluzione
La soluzione è includere gli altri set di risultati in WITH RESULT SETS
clausola.
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
)
);
Risultato:
+------------+--------------+--------------+ | 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)
Il problema è stato risolto.