Pembaruan Jan 2017 - SQL Server 2016+ / Azure SQL Database
SQL Server 2016 dan versi saat ini dari Azure SQL Database sekarang memiliki sintaks berikut untuk fungsi, prosedur, tabel, database, dll. ( DROP IF EXISTS
):
DROP FUNCTION IF EXISTS dbo.fn_myfunc;
Dan SQL Server 2016 Paket Layanan 1 menambahkan fungsionalitas yang lebih baik untuk modul (fungsi, prosedur, pemicu, tampilan) yang berarti tidak ada kehilangan izin atau dependensi ( CREATE OR ALTER
):
CREATE OR ALTER FUNCTION dbo.fn_myfunc ...
Kedua peningkatan sintaksis ini dapat menyebabkan skrip yang lebih sederhana digunakan untuk kontrol sumber, penyebaran, dll.
Tetapi, jika Anda menggunakan ...
Versi yang lebih lama
Anda perlu melakukan apa yang SQL Server lakukan ketika Anda skrip ini dari Management Studio:
IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE type = 'FN' AND name = 'fn_myfunc')
BEGIN
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'CREATE FUNCTION ...';
EXEC sp_executesql @sql;
END
Atau Anda bisa mengatakan:
BEGIN TRY
DROP FUNCTION dbo.fn_myfunc;
END TRY
BEGIN CATCH
PRINT 'Function did not exist.';
END CATCH
GO
CREATE FUNCTION...
Atau Anda bisa mengatakan:
DROP FUNCTION dbo.fn_myfunc;
GO
CREATE FUNCTION...
(Di sini Anda akan mendapatkan pesan kesalahan jika fungsi tersebut belum ada, tetapi skrip akan melanjutkan dari GO berikutnya, jadi apakah drop berfungsi atau tidak, fungsi tersebut masih akan (kembali) dibuat.)
Perhatikan bahwa jika Anda menjatuhkan fungsi dan membuatnya kembali, Anda akan kehilangan izin dan informasi ketergantungan yang potensial.