drop trigger s'il existe, et de créer
Je voudrais vérifier si le déclencheur existe sur [tbl] et en créer un autre. J'ai essayé de cette façon mais qui n'ont pas de travail. Ce que je fais mal?
IF EXISTS (SELECT * FROM sys.objects WHERE [name] = '[dbo].[trg]' AND [type] = 'TR')
DROP TRIGGER [dbo].[trg] ON [dbo].[tbl]
GO
CREATE TRIGGER [dbo].[trg] ON [dbo].[tbl]
AFTER DELETE
AS
BEGIN
//
END
GO
Vous devez vous connecter pour publier un commentaire.
La
[name]
champ danssys.objects
contient uniquement le nom réel (c'est à diretrg
), pas y compris le schéma (c'est à diredbo
dans ce cas) ou toutes les identificateurs de texte (c'est à dire[
et]
dans ce cas).ET, vous ne spécifiez pas le nom de la table pour
DROP TRIGGER
depuis le déclenchement est un objet en lui-même (à la différence des index). Si vous devez supprimer leON
clause (qui est utilisé uniquement avec les DDL et les déclencheurs de Connexion).Veuillez noter que vous devez préfixer le nom de l'objet littéral de chaîne avec un
N
depuis le[name]
champ est unsysname
type de données, ce qui équivaut àNVARCHAR(128)
.Si vous ne souhaitez intégrer le nom de schéma, vous pouvez utiliser le
OBJECT_ID()
fonction qui ne permet pas pour les noms de schéma et des identificateurs de texte (vous devrez ensuite le match contreobject_id
au lieu dename
):Et pour simplifier, car le nom de l'objet doit être unique dans le schéma, vous avez vraiment besoin de tester pour son existence. Si pour une raison quelconque un autre type d'objet existe que de nom, le
DROP TRIGGER
échoue depuis un autre objet est, ainsi, pas un déclencheur ;-). J'ai donc utiliser la syntaxe suivante:ON
clause deDROP TRIGGER
qui est la cause.Si vous utilisez SQL Server 2016, vous pouvez utiliser une variante plus courte.
https://docs.microsoft.com/en-us/sql/t-sql/statements/drop-trigger-transact-sql
Pouvez-vous essayer
EDIT:
Bien srutzky vous ai déjà donné la réponse et bien expliquées, vous pouvez analyser le nom avec l'aide de PARSENAME.