Den här artikeln gör en bra poäng om att förlora behörigheter när ett objekt släpps i SQL-servern.
Så här är tillvägagångssättet som behåller behörigheter:
IF OBJECT_ID('spCallSomething') IS NULL
EXEC('CREATE PROCEDURE spCallSomething AS SET NOCOUNT ON;')
GO
ALTER PROCEDURE spCallSomething ...
--instead of DROP/CREATE
Fungerar även för funktioner, ersätt bara PROCEDURE
med FUNCTION
i ovanstående kod.
En annan anledning att överväga att göra det på detta sätt är tolerans mot misslyckande. Anta att din DROP lyckas, men din CREATE misslyckas - du slutar med en trasig DB. Genom att använda ALTER-metoden kommer du att få en äldre version av objektet.