sql >> データベース >  >> RDS >> Sqlserver

SQLServerで「WITHRESULTSETS句が1つの結果セットを指定したためにEXECUTEステートメントが失敗しました…」を修正する方法

    ストアドプロシージャの実行中にエラーメッセージ11535、レベル16が発生した場合は、WITH RESULT SETSで十分な結果セットを定義していなかったことが原因です。 条項。

    一部のストアドプロシージャは、複数の結果セットを返します。 WITH RESULT SETSを使用する場合 句では、期待される各結果セットを定義する必要があります。結果セットの1つまたは一部の定義のみを変更する場合でも、これを行う必要があります。

    このエラーを修正するには、追加の結果セットをWITH RESULT SETSに追加するだけです。 句。それぞれがコンマで区切られます。

    WITH RESULT SETSを削除して修正することもできます 条項ですが、何らかの理由で使用していると想定します(つまり、プロシージャによって返される結果セットを再定義する必要があります)。

    エラーの原因となるコードの例

    3つの結果セットを返すストアドプロシージャがあるとします。

    EXEC sp_getCityStateCountryByCityId @CityId = 1;

    結果:

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

    そして、WITH RESULT SETSを使用したいとします。 最初の結果セットのみの列を再定義する句。

    次のコードで実行すると、エラーが発生します。

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

    結果:

    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.

    これは、他の結果セットをWITH RESULT SETSに含めなかったためです。 条項。

    ソリューション

    解決策は、他の結果セットをWITH RESULT SETSに含めることです。 条項。

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

    結果:

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

    この問題は修正されました。


    1. SQLクエリの履歴を調べる

    2. マーケティングデータベースを構築するための5つのステップ

    3. SQL FOREIGN KEY CONSTRAINT:初心者のための究極の簡単なガイド

    4. とにかくメジャーバージョンとは何ですか?