W tym artykule warto zwrócić uwagę na utratę uprawnień podczas upuszczania obiektu na serwerze SQL.
Oto podejście, które zachowuje uprawnienia:
IF OBJECT_ID('spCallSomething') IS NULL
EXEC('CREATE PROCEDURE spCallSomething AS SET NOCOUNT ON;')
GO
ALTER PROCEDURE spCallSomething ...
--instead of DROP/CREATE
Działa również dla funkcji, wystarczy zastąpić PROCEDURE
z FUNCTION
w powyższym kodzie.
Innym powodem, dla którego warto rozważyć zrobienie tego w ten sposób, jest tolerancja na niepowodzenie. Załóżmy, że Twój DROP się powiedzie, ale Twój CREATE nie powiedzie się - kończysz z uszkodzonym DB. Stosując podejście ALTER, otrzymasz starszą wersję obiektu.