J'ai besoin de savoir si une fonction existe sur une base de données, afin de pouvoir la supprimer et la créer à nouveau. Cela devrait être quelque chose comme le code suivant que j'utilise pour les procédures stockées:
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
la source
la source
J'ai tendance à utiliser Information_Schema:
pour les fonctions et changement
Routine_Type
pour les procédures stockéesla source
Pourquoi pas simplement:
Le deuxième argument de
object_id
est facultatif, mais peut aider à identifier le bon objet. Il existe de nombreuses valeurs possibles pour cet argument de type, en particulier:la source
CREATE TABLE YourFunctionName(X INT);
alors l'exécution du code échouera.object_id('YourFunction', 'FN')
ou tout autre désignateur (deuxième argument) qui indique clairement le type d'objet auquel vous faites référence.J'ai trouvé que vous pouvez utiliser une approche très non verbeuse et directe pour vérifier l'existence de divers objets SQL Server de cette façon:
Ceci est basé sur la fonction OBJECTPROPERTY qui est disponible dans SQL 2005+. L'article MSDN peut être trouvé ici .
La fonction OBJECTPROPERTY utilise la signature suivante:
Vous passez une valeur littérale dans le paramètre de propriété, désignant le type d'objet que vous recherchez. Il existe une liste massive de valeurs que vous pouvez fournir.
la source
Je sais que ce fil est vieux mais je voulais juste ajouter cette réponse pour ceux qui croient que c'est plus sûr
Alter
queDrop
etCreate
. Le ci - dessousAlter
laFunction
si elle existe ouCreate
si ne pas:la source
ALTER OR CREATE