Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O que você faz no SQL Server para CREATE OR ALTER?


Este artigo faz um bom ponto sobre a perda de permissões ao soltar um objeto no SQL Server.

Então, aqui está a abordagem que retém permissões:
IF OBJECT_ID('spCallSomething') IS NULL
    EXEC('CREATE PROCEDURE spCallSomething AS SET NOCOUNT ON;')
GO

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

Também funciona para funções, basta substituir PROCEDURE com FUNCTION no código acima.

Outra razão para considerar fazê-lo desta forma é a tolerância ao fracasso. Suponha que seu DROP seja bem-sucedido, mas seu CREATE falhe - você termina com um banco de dados quebrado. Usando a abordagem ALTER, você acabará com uma versão mais antiga do objeto.