SQLServerでエラーメッセージ11537、レベル16が発生した場合は、WITH RESULT SETS
を使用してストアドプロシージャを実行しようとしている可能性があります。 句ですが、定義にすべての列が含まれていません。
WITH RESULT SETS
を使用する場合 EXECUTE
の句 / EXEC
ステートメントでは、ストアドプロシージャによって返されるすべての列の定義を指定する必要があります。そうしないと、このエラーが発生します。
例
次のストアドプロシージャは3つの列を返します。
EXEC sp_getCityById @CityId = 1;
結果:
+------------+----------------------------+-----------------------------+ | CityName | LatestRecordedPopulation | ValidFrom | |------------+----------------------------+-----------------------------| | Aaronsburg | 613 | 2013-01-01 00:00:00.0000000 | +------------+----------------------------+-----------------------------+
ここで、いくつかの列を再定義するとします。 WITH RESULT SETS
を使用できます それを行うための条項。
問題コード
ただし、この句に3つの列すべてを含めないと、エラーが発生します。
EXEC sp_getCityById @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int
)
);
結果:
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.
エラーメッセージは、指定した列の数と、ストアドプロシージャによって送信された列の数を示しています。
この場合、2つの列を指定しましたが、プロシージャは3つを送信しました。
良いコード
3番目の列を含めることで、この問題を修正できます。
EXEC sp_getCityById @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
結果:
------------+--------------+--------------+ | City | Population | Valid From | |------------+--------------+--------------| | Aaronsburg | 613 | 2013-01-01 | +------------+--------------+--------------+