Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Cosa fai in SQL Server per CREARE O ALTERARE?

Questo articolo illustra bene la perdita delle autorizzazioni quando si rilascia un oggetto in SQL Server.

Quindi ecco l'approccio che mantiene le autorizzazioni:

IF OBJECT_ID('spCallSomething') IS NULL
    EXEC('CREATE PROCEDURE spCallSomething AS SET NOCOUNT ON;')
GO

ALTER PROCEDURE spCallSomething ... 
--instead of DROP/CREATE

Funziona anche per le funzioni, basta sostituire PROCEDURE con FUNCTION nel codice sopra.

Un altro motivo per considerare di farlo in questo modo è la tolleranza al fallimento. Supponiamo che il tuo DROP abbia successo, ma il tuo CREATE fallisca:finisci con un DB rotto. Utilizzando l'approccio ALTER, ti ritroverai con una versione precedente dell'oggetto.