1

WebフォームプロジェクトをASP.NETMVC4プロジェクトに変換する作業をしています。

このプロジェクトでは、.NETチームは既存のストアドプロシージャを変更できません。最大で、このストアドプロシージャのラッパーを作成できます。つまり、既存のストアドプロシージャを呼び出す別のストアドプロシージャを作成できます。

既存のストアドプロシージャは次のタイプです

condition 1
  Select A,B,C,D from Table
condition 2
  Select ErrorCode as 100, ErrorMessage as 'Correct that'
condition 3
  Select ErrorCode as 101, ErrorMessage as 'Correct this'
condition 4
  Select ErrorCode as 102, ErrorMessage as 'Not found' from Table

そして、私はこのプロジェクトでEntity Frameworkを使用していますが、これには複合型を事前にマッピングする必要があるため、上記の種類のストアドプロシージャでは、複合型を次のように宣言しました。

Complex Type :- SomeComplexType

    string A;
    string B;
    string C;
    string D;

    int ErrorCode;
    string ErrorMessage;

今私の問題はSQLの知識と構文の欠如です。私はグーグルとSOでたくさん検索してきましたが、これについては何も見つかりませんでした。

この既存のストアドプロシージャのラッパーを作成する方法を知りたいのですが、次のようなものがあります。

condition 1
  Select A,B,C,D,ErrorCode as NULL, ErrorMessage as NULL from Table
condition 2
  Select A,B,C,D,ErrorCode as 100, ErrorMessage as 'Correct that' from Table
condition 3
  Select A,B,C,D,ErrorCode as 101, ErrorMessage as 'Correct this' from Table
condition 4
  Select A as NULL, B as NULL, C as NULL, D as NULL,ErrorCode as 102, ErrorMessage as 'Not found' from Table

したがって、上記のようにSQLからデータを送信できれば、EntityFrameworkの関数インポートと複合型を使用して簡単に処理できます。

(ラッパーストアドプロシージャで)どの結果セットが(既存のストアドプロシージャから)返されるかを確認するにはどうすればよいですか?

これについてのアイデアを教えてください。ありがとう

4

1 に答える 1

2

編集:古い投稿は役に立たなかったので、検索に役立つ情報を追加しました:

わかりました、少しグーグルで調べましたが、あなたの問題を解決する方法が本当に見つかりません。私はいくつかの有用なリンクを見つけましたが:

ストアド プロシージャ間でデータを共有し、ストアド プロシージャの結果を一時テーブル に 挿入する方法

2番目のものが役立つことを望んでいましたが、試してみると、次のOPENROWSETエラーが発生しました。

プロシージャ 'testSP' のステートメント 'SELECT '1','2','3'' がプロシージャ 'testSP' のステートメント 'SELECT 100,200' と互換性がないため、メタデータを特定できませんでした。

だから正しい方法ではないと思います。

今、私が残した唯一のアイデアは次のとおりです。

  • ラッパーを構築する代わりに古い SP を書き換える
  • 入力値から返された結果セットを決定する方法を見つけることができますか? それが可能であれば、 if / else を使用して、データを挿入する一時テーブルの適切な列を選択し、複雑なデータ型を構築できます

これ以上お力になれず申し訳ありません

編集(再度):

最初のリンクには次のように書かれています(CLRの章で):

要約すると、INSERT-EXEC で失敗し、CLR を使用する必要がある主な状況は次のとおりです。

呼び出されたプロシージャは、異なる構造を持ついくつかの結果セットを返します。これは、SQL Server の多くのシステム プロシージャに当てはまります。

ですから、この章を読むことをお勧めします。役に立つかもしれません。

于 2012-11-15T16:47:32.160 に答える