Chúng tôi sử dụng SQL Server 2005. Tất cả truy cập dữ liệu của chúng tôi được thực hiện thông qua các thủ tục được lưu trữ. Các thủ tục được lưu trữ lựa chọn của chúng tôi luôn trả về nhiều bộ kết quả.Làm cách nào để sử dụng lại mã trong các thủ tục lưu sẵn SQL?
Ví dụ:
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
lớp truy cập dữ liệu ứng dụng của chúng tôi của xây dựng một đồ thị đối tượng dựa trên kết quả (O/R Mapper phong cách).
Vấn đề tôi có là chúng tôi có nhiều lựa chọn lưu trữ hóa đơn khác nhau được lưu trữ. Tất cả đều trả về cùng một cấu trúc, chỉ cho các tiêu chí lựa chọn khác nhau. Ví dụ, tôi cũng có:
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
và tôi có nhiều người khác bao gồm:
hd_invoice_selectActive()
hd_invoice_selectOverdue()
hd_invoice_selectForMonth(@year INT, @month INT)
và tôi có cùng một khuôn mẫu cho rất nhiều khái niệm (Khách hàng, nhân viên, vv)
Chúng tôi kết thúc sao chép rất nhiều mã và bảo trì thực sự là khó khăn. Khi "cấu trúc" của một khái niệm thay đổi, chúng ta phải đi và sửa chữa tất cả các procs và nó rất dễ bị lỗi.
Vì vậy, câu hỏi của tôi là: Cách tốt nhất để sử dụng lại mã trong kịch bản là gì?
Chúng tôi đã đưa ra giải pháp sử dụng bảng tạm thời. Nhưng nó không phải là rất thanh lịch. Tôi sẽ cho phép bạn chia sẻ ý tưởng của mình và nếu cần, tôi sẽ đăng chi tiết giải pháp của tôi trong bài đăng sắp tới để nhận xét của bạn về cách tiếp cận đó.
Cảm ơn
Điều đó rất hay. Bạn có bất kỳ ý tưởng làm thế nào điều này thực hiện? Trình tối ưu hóa truy vấn có hoạt động tốt không? Nội bộ, là nó sử dụng bảng tạm thời hoặc là nó thực sự đi qua các thiết lập như là một giá trị đơn giản. – Sylvain
Tôi chưa có cơ hội sử dụng chúng nhưng đã đọc chúng một chút. Tôi rất bảng chống temp khi có thể vì vậy nó có vẻ giống như một giải pháp thanh lịch hơn miễn là nó hoạt động tốt. –
Tôi sẽ cấu trúc lại để sử dụng phương pháp này ngay khi chúng ta chuyển sang SQL 2008. – Sylvain