SQL Server 2005 を使用しています。すべてのデータ アクセスは、ストアド プロシージャを介して行われます。セレクション ストアド プロシージャは、常に複数の結果セットを返します。
例えば:
CREATE PROCEDURE hd_invoice_select(@id INT) AS
SELECT * FROM Invoice WHERE InvoiceID = @id
SELECT * FROM InvoiceItem WHERE InvoiceID = @id
SELECT * FROM InvoiceComments WHERE InvoiceID = @id
RETURN
アプリケーションのデータ アクセス レイヤーは、結果に基づいてオブジェクト グラフを作成します (O/R マッパー スタイル)。
私が抱えている問題は、さまざまな請求書選択ストアド プロシージャがあることです。それらはすべて同じ構造を返しますが、選択基準が異なるだけです。たとえば、私も持っています:
CREATE PROCEDURE hd_invoice_selectAllForCustomer(@customerID INT) AS
SELECT * FROM Invoice WHERE CustomerID = @customerID
SELECT * FROM InvoiceItem WHERE InvoiceID IN
(SELECT InvoiceID FROM Invoice WHERE CustomerID = @customerID)
SELECT * FROM InvoiceComments WHERE InvoiceID = @id
(SELECT InvoiceID FROM Invoice WHERE CustomerID = @customerID)
RETURN
そして、私は次のような他の多くを持っています:
hd_invoice_selectActive()
hd_invoice_selectOverdue()
hd_invoice_selectForMonth(@year INT, @month INT)
私は多くの概念(顧客、従業員など)に対して同じパターンを持っています
大量のコードをコピーすることになり、メンテナンスは本当に大変です。コンセプトの「構造」が変わると、すべてのプロセスを修正する必要があり、非常にエラーが発生しやすくなります。
私の質問は次のとおりです。シナリオでコードを再利用する最良の方法は何ですか?
一時テーブルを使用するソリューションを考え出しました。しかし、それはあまりエレガントではありません。アイデアを共有させていただきます。必要に応じて、ソリューションの詳細を今後の投稿に投稿し、そのアプローチに関するコメントをお待ちしております。
ありがとう