我们使用 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 Mapper 样式)构建对象图。
我遇到的问题是我们有许多不同的发票选择存储过程。它们都返回相同的结构,只是针对不同的选择标准。例如,我还有:
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)
我对很多概念(客户、员工等)都有相同的模式
我们最终会复制大量代码,维护起来非常困难。当一个概念的“结构”发生变化时,我们必须去修复所有的过程,这很容易出错。
所以我的问题是:在场景中重用代码的最佳方法是什么?
我们提出了一个使用临时表的解决方案。但它不是很优雅。我会让您分享您的想法,如有必要,我将在即将发布的帖子中发布我的解决方案的详细信息,以获得您对该方法的评论。
谢谢