Мы используем SQL Server 2005. Весь доступ к данным осуществляется через хранимые процедуры. Наши хранимые процедуры выбора всегда возвращают несколько наборов результатов.Как повторно использовать код в хранимых процедурах SQL?
Например:
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)
и у меня есть один и тот же шаблон для многих понятий (клиентов, сотрудников и т.д.)
Мы в конечном итоге копируем много кода и обслуживание очень сложно. Когда изменяется «структура» концепции, мы должны идти и исправлять все процессы, и это очень подвержено ошибкам.
Итак, мой вопрос: что является лучшим способом повторного использования кода в сценарии?
Мы разработали решение, использующее временные таблицы. Но это не очень элегантно. Я позволю вам поделиться своими идеями, и в случае необходимости я опубликую детали своего решения на предстоящей публикации, чтобы получить ваши комментарии к этому подходу.
Благодаря
Это очень здорово. Вы знаете, как это происходит? Оптимизатор запросов выполняет хорошую работу? Внутренне это использование временных таблиц, или это действительно передача набора как простого значения. – Sylvain
У меня еще не было возможности использовать их, но немного почитал их. Я, по возможности, очень анти-temp-таблицы, поэтому кажется более элегантным решением, если оно работает хорошо. –
Я буду реорганизовать этот подход, как только мы перейдем к SQL 2008. – Sylvain