Update Januar 2017 - SQL Server 2016+ / Azure SQL-Datenbank
SQL Server 2016 und die aktuelle Version der Azure SQL-Datenbank haben jetzt die folgende Syntax für Funktionen, Prozeduren, Tabellen, Datenbanken usw. ( DROP IF EXISTS
):
DROP FUNCTION IF EXISTS dbo.fn_myfunc;
SQL Server 2016 Service Pack 1 bietet noch bessere Funktionen für Module (Funktionen, Prozeduren, Trigger, Ansichten), sodass keine Berechtigungen oder Abhängigkeiten verloren gehen ( CREATE OR ALTER
):
CREATE OR ALTER FUNCTION dbo.fn_myfunc ...
Diese beiden Syntaxverbesserungen können zu wesentlich einfacheren Skripten führen, die für die Quellcodeverwaltung, Bereitstellungen usw. verwendet werden.
Aber wenn Sie verwenden ...
ältere Versionen
Sie müssen die Schritte von SQL Server ausführen, wenn Sie diese in Management Studio ausführen:
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
Oder du kannst sagen:
BEGIN TRY
DROP FUNCTION dbo.fn_myfunc;
END TRY
BEGIN CATCH
PRINT 'Function did not exist.';
END CATCH
GO
CREATE FUNCTION...
Oder Sie können einfach sagen:
DROP FUNCTION dbo.fn_myfunc;
GO
CREATE FUNCTION...
(Hier wird eine Fehlermeldung angezeigt, wenn die Funktion noch nicht vorhanden ist. Das Skript wird jedoch beim nächsten Start fortgesetzt. Unabhängig davon, ob das Löschen funktioniert hat oder nicht, wird die Funktion dennoch (neu) erstellt.)
Beachten Sie, dass beim Löschen und erneuten Erstellen der Funktion Berechtigungen und möglicherweise auch Abhängigkeitsinformationen verloren gehen.