sql >> Database >  >> RDS >> Sqlserver

Hoe te repareren "EXECUTE-instructie is mislukt omdat de WITH RESULT SETS-clausule 2 kolom(men) voor resultatenset specificeert ..." Msg 11537 in SQL Server

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

  1. Ongeldig syntaxisfouttype =MyISAM in DDL gegenereerd door Hibernate

  2. De rollen gebruiken die zijn veranderd in MySQL 8.0

  3. Hoe alle fouten van alle SSIS-pakketten in een oplossing te krijgen?

  4. mysql twee kolommen primaire sleutel met automatische verhoging