Cet article met l'accent sur la perte d'autorisations lors de la suppression d'un objet dans le serveur SQL.
Voici donc l'approche qui conserve les autorisations :
IF OBJECT_ID('spCallSomething') IS NULL
EXEC('CREATE PROCEDURE spCallSomething AS SET NOCOUNT ON;')
GO
ALTER PROCEDURE spCallSomething ...
--instead of DROP/CREATE
Fonctionne également pour les fonctions, il suffit de remplacer PROCEDURE
avec FUNCTION
dans le code ci-dessus.
Une autre raison d'envisager de le faire de cette façon est la tolérance à l'échec. Supposons que votre DROP réussisse, mais que votre CREATE échoue - vous vous retrouvez avec une base de données cassée. En utilisant l'approche ALTER, vous vous retrouverez avec une ancienne version de l'objet.