Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como corrigir “falha na instrução EXECUTE porque sua cláusula WITH RESULT SETS especificou 1 conjunto(s) de resultados…” no SQL Server


Se você encontrar o erro Msg 11535, Level 16 ao tentar executar um procedimento armazenado, é porque você não definiu conjuntos de resultados suficientes em WITH RESULT SETS cláusula.

Alguns procedimentos armazenados retornam vários conjuntos de resultados. Ao usar o WITH RESULT SETS cláusula, você precisa definir cada conjunto de resultados esperados. Você precisa fazer isso mesmo se quiser apenas alterar a definição de um ou alguns dos conjuntos de resultados.

Para corrigir esse erro, basta adicionar os conjuntos de resultados adicionais ao WITH RESULT SETS cláusula, cada uma separada por uma vírgula.

Você também pode corrigi-lo removendo o WITH RESULT SETS cláusula, mas vou assumir que você está usando por um motivo (ou seja, você precisa redefinir o conjunto de resultados retornado pelo procedimento).

Exemplo de código que causa o erro


Suponha que temos um procedimento armazenado que retorna três conjuntos de resultados.
EXEC sp_getCityStateCountryByCityId @CityId = 1;

Resultado:
+------------+----------------------------+-----------------------------+
| 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 digamos que queremos usar o WITH RESULT SETS cláusula para redefinir as colunas apenas do primeiro conjunto de resultados.

Fazer isso com o código a seguir produzirá um erro.
EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS   
(  
    (
        [City] nvarchar(50),
        [Population] int,
        [Valid From] date
    )
);

Resultado:
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.

Isso ocorre porque não incluímos os outros conjuntos de resultados em WITH RESULT SETS cláusula.

A solução


A solução é incluir os outros conjuntos de resultados no WITH RESULT SETS cláusula.
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
    )
);

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

O problema já foi corrigido.