Artikel ini menjelaskan tentang kehilangan izin saat menjatuhkan objek di server SQL.
Jadi, inilah pendekatan yang mempertahankan izin:
IF OBJECT_ID('spCallSomething') IS NULL
EXEC('CREATE PROCEDURE spCallSomething AS SET NOCOUNT ON;')
GO
ALTER PROCEDURE spCallSomething ...
--instead of DROP/CREATE
Juga berfungsi untuk fungsi, cukup ganti PROCEDURE
dengan FUNCTION
pada kode di atas.
Alasan lain untuk mempertimbangkan melakukannya dengan cara ini adalah toleransi terhadap kegagalan. Misalkan DROP Anda berhasil, tetapi CREATE Anda gagal - Anda berakhir dengan DB yang rusak. Menggunakan pendekatan ALTER, Anda akan mendapatkan versi objek yang lebih lama.