sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan rettes "EXECUTE-sætningen mislykkedes, fordi dens WITH RESULT SETS-klausul specificerede 1 resultatsæt(er)..." i SQL Server

Hvis du støder på fejlmeddelelse 11535, niveau 16, mens du forsøger at udføre en lagret procedure, er det fordi du ikke har defineret nok resultatsæt i WITH RESULT SETS klausul.

Nogle lagrede procedurer returnerer flere resultatsæt. Når du bruger MED RESULTATSÆT klausul, skal du definere hvert forventet resultatsæt. Du skal gøre dette, selvom du kun ønsker at ændre definitionen af ​​et eller nogle af resultatsættene.

For at rette denne fejl skal du blot tilføje de yderligere resultatsæt til MED RESULTATSÆT klausul, hver adskilt af et komma.

Du kan også rette det ved at fjerne MED RESULTATSÆT klausul, men jeg antager, at du bruger den af ​​en grund (dvs. du skal omdefinere det resultatsæt, der returneres af proceduren).

Eksempel på kode, der forårsager fejlen

Antag, at vi har en lagret procedure, der returnerer tre resultatsæt.

EXEC sp_getCityStateCountryByCityId @CityId = 1;

Resultat:

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

Og sig, at vi vil bruge MED RESULTATSÆT klausul for at omdefinere kolonnerne i kun det første resultatsæt.

Hvis du gør det med følgende kode, produceres der en fejl.

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

Resultat:

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.

Dette skyldes, at vi ikke inkluderede de andre resultatsæt i WITH RESULT SETS klausul.

Løsningen

Løsningen er at inkludere de andre resultatsæt i WITH RESULT SETS klausul.

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

Resultat:

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

Problemet er nu løst.


  1. Udførelse af sekvenser og serier i Postgres-XL

  2. Hvornår skal man bruge MongoDB eller andre dokumentorienterede databasesystemer?

  3. Send og returner tilpasset array-objekt i ibatis og oracle i java

  4. Sammenligning af Load Balancers til PostgreSQL