Ocak 2017 Güncellemesi - SQL Server 2016+ / Azure SQL Veritabanı
SQL Server 2016 ve Azure SQL Veritabanı'nın geçerli sürümü artık işlevler, yordamlar, tablolar, veritabanları vb. İçin aşağıdaki sözdizimine sahiptir DROP IF EXISTS
:
DROP FUNCTION IF EXISTS dbo.fn_myfunc;
SQL Server 2016 Service Pack 1, modüller (işlevler, prosedürler, tetikleyiciler, görünümler) için daha da iyi işlevsellik ekler; bu da izinlerin veya bağımlılıkların kaybolması anlamına gelmez ( CREATE OR ALTER
):
CREATE OR ALTER FUNCTION dbo.fn_myfunc ...
Bu sözdizimi geliştirmelerinin her ikisi de kaynak kontrolü, dağıtımlar vb. İçin kullanılan çok daha basit komut dosyalarına yol açabilir.
Ama eğer kullanıyorsanız ...
eski versiyonlar
Management Studio'dan komut dosyası yazarken SQL Server'ın yapması gerekenler:
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
Veya şöyle diyebilirsiniz:
BEGIN TRY
DROP FUNCTION dbo.fn_myfunc;
END TRY
BEGIN CATCH
PRINT 'Function did not exist.';
END CATCH
GO
CREATE FUNCTION...
Veya sadece şunu söyleyebilirsiniz:
DROP FUNCTION dbo.fn_myfunc;
GO
CREATE FUNCTION...
(Burada işlev zaten mevcut değilse bir hata mesajı alırsınız, ancak komut dosyası bir sonraki GO'dan devam eder, bu nedenle bırakma işe yarayıp çalışmadığına göre, işlev yine de (yeniden) oluşturulur.)
İşlevi bırakıp yeniden oluşturursanız, izinleri ve potansiyel olarak bağımlılık bilgilerini de kaybedeceğinizi unutmayın.