Ich muss herausfinden, ob eine Funktion in einer Datenbank vorhanden ist, damit ich sie löschen und erneut erstellen kann. Es sollte im Grunde so etwas wie der folgende Code sein, den ich für gespeicherte Prozeduren verwende:
IF EXISTS (
SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[SP_TEST]')
AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
sql
sql-server
sql-function
Dr. Greenthumb
quelle
quelle
Ich neige dazu, das Information_Schema zu verwenden:
für Funktionen und Änderung
Routine_Type
für gespeicherte Prozedurenquelle
Warum nicht einfach:
Das zweite Argument von
object_id
ist optional, kann jedoch dazu beitragen, das richtige Objekt zu identifizieren. Für dieses Typargument gibt es zahlreiche mögliche Werte , insbesondere:quelle
CREATE TABLE YourFunctionName(X INT);
dann das Ausführen des Codes fehlschlägt.object_id('YourFunction', 'FN')
einen anderen Bezeichner (zweites Argument), der klar macht, auf welche Art von Objekt Sie sich beziehen.Ich habe festgestellt, dass Sie auf sehr unkomplizierte und unkomplizierte Weise die Existenz verschiedener SQL Server-Objekte auf folgende Weise überprüfen können:
Dies basiert auf der Funktion OBJECTPROPERTY, die in SQL 2005+ verfügbar ist. Den MSDN-Artikel finden Sie hier .
Die Funktion OBJECTPROPERTY verwendet die folgende Signatur:
Sie übergeben einen Literalwert an den Eigenschaftsparameter und geben den gewünschten Objekttyp an. Es gibt eine riesige Liste von Werten, die Sie angeben können.
quelle
Ich weiß, dass dieser Thread alt ist, aber ich wollte diese Antwort nur für diejenigen hinzufügen, die glauben, dass es sicherer ist
Alter
alsDrop
undCreate
. Das Folgende wirdAlter
das,Function
wenn es existiert oderCreate
wenn es nicht existiert:quelle
ALTER OR CREATE