Bài viết này đề cập đến vấn đề mất quyền khi thả một đối tượng trong máy chủ SQL.
Vì vậy, đây là phương pháp giữ lại quyền:
IF OBJECT_ID('spCallSomething') IS NULL
EXEC('CREATE PROCEDURE spCallSomething AS SET NOCOUNT ON;')
GO
ALTER PROCEDURE spCallSomething ...
--instead of DROP/CREATE
Cũng hoạt động cho các chức năng, chỉ cần thay thế PROCEDURE
với FUNCTION
trong đoạn mã trên.
Một lý do khác để cân nhắc làm theo cách này là khả năng chịu đựng thất bại. Giả sử DROP của bạn thành công, nhưng CREATE của bạn không thành công - bạn kết thúc với một DB bị hỏng. Sử dụng phương pháp ALTER, bạn sẽ có một phiên bản cũ hơn của đối tượng.