Tôi sẽ không đồng ý với Aaron (và câu trả lời được chấp nhận).
Cách tiếp cận của Aaron là cách tôi muốn đối phó với "công cụ DBA", ví dụ như các kịch bản bảo trì. Tôi sẽ không bao giờ muốn làm điều này với một chức năng thư viện sẽ được gọi bởi cơ sở dữ liệu người dùng.
Tại sao? Bạn sẽ hướng đến cơ sở dữ liệu tương đương với DLL Hell .
Phiên bản không tương thích
... Trước Windows 2000, Windows dễ bị tổn thương vì bảng lớp COM được chia sẻ trên tất cả người dùng và quy trình. Chỉ có một đối tượng COM, trong một DLL / EXE có thể được khai báo là có ID lớp COM toàn cầu cụ thể trên một hệ thống. Nếu bất kỳ chương trình nào cần thiết để tạo một thể hiện của lớp đó, thì nó có bất cứ thứ gì là triển khai được đăng ký tập trung hiện tại. Do đó, việc cài đặt chương trình cài đặt phiên bản mới của một đối tượng chung có thể vô tình phá vỡ các chương trình khác đã được cài đặt trước đó.
Cài đặt .net 4.5 trên máy chủ chạy ứng dụng .net 2.0 và điều gì xảy ra? Không có gì, ứng dụng của bạn tiếp tục sử dụng khung 2.0. Cập nhật chức năng LastIndexOf của bạn trên máy chủ lưu trữ 3 cơ sở dữ liệu ứng dụng (là một phần của bản nâng cấp lên một trong số chúng) và điều gì xảy ra? Cả ba hiện đang sử dụng phiên bản mới nhất.
Thay thế là cách tiếp cận được áp dụng bởi SQL # . Điều này được cài đặt vào một lược đồ trong mỗi cơ sở dữ liệu người dùng, vì vậy bạn có thể nâng cấp cơ sở dữ liệu cho Application-X một cách an toàn mà không gặp rủi ro về tính ổn định của Application-Y.
Nếu bạn đang làm việc trong môi trường quản lý thay đổi được kiểm soát chặt chẽ, bạn sẽ không có lựa chọn nào khác, bạn không thể nâng cấp một thành phần dùng chung mà không kiểm tra tất cả người tiêu dùng của thành phần đó. Nếu bạn đang làm việc ở đâu đó "nhanh và lỏng" hơn một chút, bạn có thể tự do nắm bắt cơ hội của mình bằng cách phá vỡ thứ gì đó vô tình bằng một bản vá / nâng cấp.