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.