Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Écriture d'un trigger

3 réponses
Avatar
Jacques \(BE\)
Bonjour tout le monde,

Je dois vérifier au lancement d'une procédure si une table X existe.
Si elle n'existe pas la créér et ensuite ajouter un trigger T.

Je crée ma table et ensuite mon trigger.

La première fois que je fais la vérification, il n'y a pas de problème mais
à la deuxième j'ai une erreur car mon trigger existe déjà.

Est-il possible de mettre tout le code de création dans la même requête &
Je vérifie si la table existe. si elle n'existe pas je la crée et du même
coup je pourrais créer le trigger
Au deuxième passage comme ma table existe déjà , la procédure ne tenterait
pas de créer une
nouvelle fois le trigger et je n'aurai plus de message d'erreur.

Peut-être est-il possible de vérifier si trigger existe comme pour la table
mais je ne connais
pas la syntaxe pour le faire



Merci

Jacques



Voici ma procédure

'Je créé la table
Dim sqlCreer_Arch As String = "USE project_371 " & _

" IF NOT EXISTS ( SELECT * FROM project_371 " & _

" .dbo.sysobjects WHERE Name = 'Response_Arch' AND TYPE = 'u') " & _

" CREATE TABLE [dbo].[Response_Arch]( " & _

"[RpsRespondent] [varchar](10) NOT NULL, " & _

"[RpsQuestion] [nvarchar](10) NOT NULL, " & _

"[RpsMatrix] [int] NOT NULL DEFAULT ((1)), " & _

"[RpsMention] [int] NOT NULL DEFAULT ((1)), " & _

"[RpsContent] [nvarchar](100) NULL, " & _

"[RpsOpened] [ntext] NULL, " & _

"[RpsType] [int] NOT NULL, " & _

"[projectId] [int] NULL, " & _

"[collectMode] [int] NULL, " & _

"[modifiedBy] [int] NULL, " & _

"[modified] [datetime] NULL," & _

"[DTIN] [datetime] NULL)"

'Je crée le trigger

Dim sqlCreerTrigger = " CREATE TRIGGER [dbo].[MAJDATE]" & _

" ON [dbo].[Response_Arch]" & _

" AFTER INSERT,UPDATE" & _

" AS " & _

" BEGIN" & _

" SET NOCOUNT ON;" & _

" UPDATE Response_Arch SET DTIN = GETDATE()" & _

" END"

3 réponses

Avatar
Fred BROUARD
Si vous êtes en 2000, testez l'existence du trigger par :
IF EXISTS (SELECT *
FROM MaBase.dbo.sysobjects
WHERE xtype = 'TR'
AND name = '???')

En 2005 faites le à travers la vue sys.triggers

A +



Jacques (BE) a écrit :
Bonjour tout le monde,

Je dois vérifier au lancement d'une procédure si une table X existe.
Si elle n'existe pas la créér et ensuite ajouter un trigger T.

Je crée ma table et ensuite mon trigger.

La première fois que je fais la vérification, il n'y a pas de problème mais
à la deuxième j'ai une erreur car mon trigger existe déjà.

Est-il possible de mettre tout le code de création dans la même requête &
Je vérifie si la table existe. si elle n'existe pas je la crée et du même
coup je pourrais créer le trigger
Au deuxième passage comme ma table existe déjà , la procédure ne tenterait
pas de créer une
nouvelle fois le trigger et je n'aurai plus de message d'erreur.

Peut-être est-il possible de vérifier si trigger existe comme pour la table
mais je ne connais
pas la syntaxe pour le faire



Merci

Jacques



Voici ma procédure

'Je créé la table
Dim sqlCreer_Arch As String = "USE project_371 " & _

" IF NOT EXISTS ( SELECT * FROM project_371 " & _

" .dbo.sysobjects WHERE Name = 'Response_Arch' AND TYPE = 'u') " & _

" CREATE TABLE [dbo].[Response_Arch]( " & _

"[RpsRespondent] [varchar](10) NOT NULL, " & _

"[RpsQuestion] [nvarchar](10) NOT NULL, " & _

"[RpsMatrix] [int] NOT NULL DEFAULT ((1)), " & _

"[RpsMention] [int] NOT NULL DEFAULT ((1)), " & _

"[RpsContent] [nvarchar](100) NULL, " & _

"[RpsOpened] [ntext] NULL, " & _

"[RpsType] [int] NOT NULL, " & _

"[projectId] [int] NULL, " & _

"[collectMode] [int] NULL, " & _

"[modifiedBy] [int] NULL, " & _

"[modified] [datetime] NULL," & _

"[DTIN] [datetime] NULL)"

'Je crée le trigger

Dim sqlCreerTrigger = " CREATE TRIGGER [dbo].[MAJDATE]" & _

" ON [dbo].[Response_Arch]" & _

" AFTER INSERT,UPDATE" & _

" AS " & _

" BEGIN" & _

" SET NOCOUNT ON;" & _

" UPDATE Response_Arch SET DTIN = GETDATE()" & _

" END"






--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Avatar
Jacques \(BE\)
Bonjour (et merci),

Voici le code utilisé directement dans SQL SERVER :

IF EXISTS (SELECT *
FROM .dbo.sysobjects
WHERE xtype = 'TR'
AND name = 'MAJDATE')
CREATE TRIGGER dbo.MAJDATE
ON dbo.Response_Arch
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE Response_Arch SET DTIN = GETDATE()
END

Message d'erreur :

Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'TRIGGER'.

Comment résoudre ce problème ?? Je ne suis que débutant dans SQL Server
...:-(


Merci



"Fred BROUARD" a écrit dans le message de
news:uwgmk$
Si vous êtes en 2000, testez l'existence du trigger par :
IF EXISTS (SELECT *
FROM MaBase.dbo.sysobjects
WHERE xtype = 'TR'
AND name = '???')

En 2005 faites le à travers la vue sys.triggers

A +



Jacques (BE) a écrit :
> Bonjour tout le monde,
>
> Je dois vérifier au lancement d'une procédure si une table X existe.
> Si elle n'existe pas la créér et ensuite ajouter un trigger T.
>
> Je crée ma table et ensuite mon trigger.
>
> La première fois que je fais la vérification, il n'y a pas de problème


mais
> à la deuxième j'ai une erreur car mon trigger existe déjà.
>
> Est-il possible de mettre tout le code de création dans la même requête


&
> Je vérifie si la table existe. si elle n'existe pas je la crée et du


même
> coup je pourrais créer le trigger
> Au deuxième passage comme ma table existe déjà , la procédure ne


tenterait
> pas de créer une
> nouvelle fois le trigger et je n'aurai plus de message d'erreur.
>
> Peut-être est-il possible de vérifier si trigger existe comme pour la


table
> mais je ne connais
> pas la syntaxe pour le faire
>
>
>
> Merci
>
> Jacques
>
>
>
> Voici ma procédure
>
> 'Je créé la table
> Dim sqlCreer_Arch As String = "USE project_371 " & _
>
> " IF NOT EXISTS ( SELECT * FROM project_371 " & _
>
> " .dbo.sysobjects WHERE Name = 'Response_Arch' AND TYPE = 'u') " & _
>
> " CREATE TABLE [dbo].[Response_Arch]( " & _
>
> "[RpsRespondent] [varchar](10) NOT NULL, " & _
>
> "[RpsQuestion] [nvarchar](10) NOT NULL, " & _
>
> "[RpsMatrix] [int] NOT NULL DEFAULT ((1)), " & _
>
> "[RpsMention] [int] NOT NULL DEFAULT ((1)), " & _
>
> "[RpsContent] [nvarchar](100) NULL, " & _
>
> "[RpsOpened] [ntext] NULL, " & _
>
> "[RpsType] [int] NOT NULL, " & _
>
> "[projectId] [int] NULL, " & _
>
> "[collectMode] [int] NULL, " & _
>
> "[modifiedBy] [int] NULL, " & _
>
> "[modified] [datetime] NULL," & _
>
> "[DTIN] [datetime] NULL)"
>
> 'Je crée le trigger
>
> Dim sqlCreerTrigger = " CREATE TRIGGER [dbo].[MAJDATE]" & _
>
> " ON [dbo].[Response_Arch]" & _
>
> " AFTER INSERT,UPDATE" & _
>
> " AS " & _
>
> " BEGIN" & _
>
> " SET NOCOUNT ON;" & _
>
> " UPDATE Response_Arch SET DTIN = GETDATE()" & _
>
> " END"
>
>


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************


Avatar
Fred BROUARD
Mieux :

IF EXISTS (SELECT *
FROM .dbo.sysobjects
WHERE xtype = 'TR'
AND name = 'MAJDATE')
DROP TRIGGER;
GO

CREATE TRIGGER dbo.MAJDATE
ON dbo.Response_Arch
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE Response_Arch SET DTIN = GETDATE();
WHERE LaClef IN (SELECT LaClef FROM inserted) ;
END;
GO

Ou LaClef est la clef de la table Response_Arch

A +

Jacques (BE) a écrit :
Bonjour (et merci),

Voici le code utilisé directement dans SQL SERVER :

IF EXISTS (SELECT *
FROM .dbo.sysobjects
WHERE xtype = 'TR'
AND name = 'MAJDATE')
CREATE TRIGGER dbo.MAJDATE
ON dbo.Response_Arch
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE Response_Arch SET DTIN = GETDATE()
END

Message d'erreur :

Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'TRIGGER'.

Comment résoudre ce problème ?? Je ne suis que débutant dans SQL Server
...:-(


Merci



"Fred BROUARD" a écrit dans le message de
news:uwgmk$
Si vous êtes en 2000, testez l'existence du trigger par :
IF EXISTS (SELECT *
FROM MaBase.dbo.sysobjects
WHERE xtype = 'TR'
AND name = '???')

En 2005 faites le à travers la vue sys.triggers

A +



Jacques (BE) a écrit :
Bonjour tout le monde,

Je dois vérifier au lancement d'une procédure si une table X existe.
Si elle n'existe pas la créér et ensuite ajouter un trigger T.

Je crée ma table et ensuite mon trigger.

La première fois que je fais la vérification, il n'y a pas de problème




mais
à la deuxième j'ai une erreur car mon trigger existe déjà.

Est-il possible de mettre tout le code de création dans la même requête




&
Je vérifie si la table existe. si elle n'existe pas je la crée et du




même
coup je pourrais créer le trigger
Au deuxième passage comme ma table existe déjà , la procédure ne




tenterait
pas de créer une
nouvelle fois le trigger et je n'aurai plus de message d'erreur.

Peut-être est-il possible de vérifier si trigger existe comme pour la




table
mais je ne connais
pas la syntaxe pour le faire



Merci

Jacques



Voici ma procédure

'Je créé la table
Dim sqlCreer_Arch As String = "USE project_371 " & _

" IF NOT EXISTS ( SELECT * FROM project_371 " & _

" .dbo.sysobjects WHERE Name = 'Response_Arch' AND TYPE = 'u') " & _

" CREATE TABLE [dbo].[Response_Arch]( " & _

"[RpsRespondent] [varchar](10) NOT NULL, " & _

"[RpsQuestion] [nvarchar](10) NOT NULL, " & _

"[RpsMatrix] [int] NOT NULL DEFAULT ((1)), " & _

"[RpsMention] [int] NOT NULL DEFAULT ((1)), " & _

"[RpsContent] [nvarchar](100) NULL, " & _

"[RpsOpened] [ntext] NULL, " & _

"[RpsType] [int] NOT NULL, " & _

"[projectId] [int] NULL, " & _

"[collectMode] [int] NULL, " & _

"[modifiedBy] [int] NULL, " & _

"[modified] [datetime] NULL," & _

"[DTIN] [datetime] NULL)"

'Je crée le trigger

Dim sqlCreerTrigger = " CREATE TRIGGER [dbo].[MAJDATE]" & _

" ON [dbo].[Response_Arch]" & _

" AFTER INSERT,UPDATE" & _

" AS " & _

" BEGIN" & _

" SET NOCOUNT ON;" & _

" UPDATE Response_Arch SET DTIN = GETDATE()" & _

" END"





--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************








--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************