Dieser Artikel macht einen guten Punkt über den Verlust von Berechtigungen, wenn ein Objekt in SQL Server gelöscht wird.
Hier ist also der Ansatz, der Berechtigungen behält:
IF OBJECT_ID('spCallSomething') IS NULL
EXEC('CREATE PROCEDURE spCallSomething AS SET NOCOUNT ON;')
GO
ALTER PROCEDURE spCallSomething ...
--instead of DROP/CREATE
Funktioniert auch für Funktionen, ersetzen Sie einfach PROCEDURE
mit FUNCTION
im obigen Code.
Ein weiterer Grund, dies in Betracht zu ziehen, ist die Fehlertoleranz. Angenommen, Ihr DROP ist erfolgreich, aber Ihr CREATE schlägt fehl - Sie enden mit einer kaputten DB. Wenn Sie den ALTER-Ansatz verwenden, erhalten Sie am Ende eine ältere Version des Objekts.