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

修正方法「WITHRESULTSETS句で結果セットに2列が指定されたため、EXECUTEステートメントが失敗しました…」SQLServerのメッセージ11537

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

    1. MySQLはWHEREIN句でインデックスを使用していませんか?

    2. コロン記号はSQLクエリで何をしますか?

    3. MySQLで空の値を許可する一意の制約

    4. SQL Serverで数百万行の大きなテーブルを更新するにはどうすればよいですか?