Als u foutbericht 11537, niveau 16 in SQL Server tegenkomt, is de kans groot dat u een opgeslagen procedure probeert uit te voeren met behulp van de WITH RESULT SETS
clausule, maar u heeft niet alle kolommen in uw definitie opgenomen.
Wanneer u de WITH RESULT SETS
. gebruikt clausule in de EXECUTE
/EXEC
instructie, moet u een definitie opgeven voor alle kolommen die door de opgeslagen procedure worden geretourneerd. Als je dat niet doet, krijg je deze foutmelding.
Voorbeeld
De volgende opgeslagen procedure retourneert drie kolommen.
EXEC sp_getCityById @CityId = 1;
Resultaat:
+------------+----------------------------+-----------------------------+ | CityName | LatestRecordedPopulation | ValidFrom | |------------+----------------------------+-----------------------------| | Aaronsburg | 613 | 2013-01-01 00:00:00.0000000 | +------------+----------------------------+-----------------------------+
Stel nu dat we enkele kolommen opnieuw willen definiëren. We kunnen de WITH RESULT SETS
. gebruiken clausule om dat te doen.
Probleemcode
Maar als we niet alle drie de kolommen in deze clausule opnemen, krijgen we een foutmelding.
EXEC sp_getCityById @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int
)
);
Resultaat:
Msg 11537, Level 16, State 1, Procedure sp_getCityById, Line 5 EXECUTE statement failed because its WITH RESULT SETS clause specified 2 column(s) for result set number 1, but the statement sent 3 column(s) at run time.
Het foutbericht vertelt ons hoeveel kolommen we hebben opgegeven en hoeveel er zijn verzonden door de opgeslagen procedure.
In dit geval hebben we twee kolommen gespecificeerd, maar de procedure heeft er drie verzonden.
Goede code
We kunnen dit probleem oplossen door de derde kolom op te nemen.
EXEC sp_getCityById @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Resultaat:
------------+--------------+--------------+ | City | Population | Valid From | |------------+--------------+--------------| | Aaronsburg | 613 | 2013-01-01 | +------------+--------------+--------------+