Tento článek je dobrým bodem o ztrátě oprávnění při upuštění objektu na SQL server.
Zde je tedy přístup, který zachovává oprávnění:
IF OBJECT_ID('spCallSomething') IS NULL
EXEC('CREATE PROCEDURE spCallSomething AS SET NOCOUNT ON;')
GO
ALTER PROCEDURE spCallSomething ...
--instead of DROP/CREATE
Funguje také pro funkce, stačí nahradit PROCEDURE
pomocí FUNCTION
ve výše uvedeném kódu.
Dalším důvodem, proč to takto dělat, je tolerance k neúspěchu. Předpokládejme, že váš DROP uspěje, ale vaše CREATE selže – skončíte s rozbitou DB. Pomocí přístupu ALTER skončíte se starší verzí objektu.