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

EF4-選択したストアドプロシージャは列を返しません

    EFは、以下から結果セットをビルドするストアドプロシージャのインポートをサポートしていません:

    • 動的クエリ
    • 一時的なテーブル

    その理由は、プロシージャをインポートするにはEFが実行する必要があるためです。 。このような操作は、データベースにいくつかの変更を引き起こす可能性があるため、危険な場合があります。そのため、EFはストアドプロシージャを実行する前に特別なSQLコマンドを使用します。

    SET FMTONLY ON
    

    このコマンドを実行すると、ストアドプロシージャは、結果セットの列に関する「メタデータ」のみを返し、ロジックは実行されません。ただし、ロジックが実行されなかったため、一時テーブル(または構築された動的クエリ)がないため、メタデータには何も含まれていません。

    2つの選択肢があります(これらの機能を使用しないようにストアドプロシージャを書き直す必要がある場合を除く):

    • 返された複合型を手動で定義します(おそらく機能するはずです)
    • ハックを使用し、最初に配置されたストアドプロシージャを追加するためだけにSET FMTONLY OFF 。これにより、SPの残りのコードを通常の方法で実行できるようになります。これらの変更はインポート中に実行されるため、SPがデータを変更しないことを確認してください。インポートが成功したら、そのハックを削除します。


    1. SQLServer2008でwhileループを実行する

    2. 19データベース設計エラーについて学ぶためのオンラインリソース

    3. PostgreSQL:結果のデータをSQLクエリからExcel/CSVにエクスポートします

    4. 選択した結果をOracleで転置する