Bonjour,
je débute. Je souhaite tout simplement créer un trigger qui servirai de compteur.
cad : le champ NUM d'une Table TEST doit être incrémenté de 1 à chaque INSERT.
Quelle est la syntaxe exacte ?
Merci, Cyrille.
Bonjour,
je débute. Je souhaite tout simplement créer un trigger qui servirai de compteur.
cad : le champ NUM d'une Table TEST doit être incrémenté de 1 à chaque INSERT.
Quelle est la syntaxe exacte ?
Merci, Cyrille.
Bonjour,
par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TRIGGER trig1 ON Tab1 FOR INSERT AS Update Tab2 Set COLnum = COLnum + 1 GO
Le trigger est inutile : il suffit que le champ en question ait la propriété compteur activée , par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE TABLE TEST ( ..., NUM INT IDENTITY(1,1) NOT NULL, ... ) ON [PRIMARY]
Je sais qu'il est préférable d'utiliser les compteurs mais c'est juste pour la syntaxe.
Par ailleurs, dans l'exemple de Macfurp :
--> c'est la valeur de saisie qui est incrémentée de 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TRIGGER trig1 ON Tab1 FOR INSERT AS Update Tab2 Set COLnum = COLnum + 1 GO
Ce que je souhaite c'est que la valeur max de la colonne X soit recherchée et incrémenté.
Voici un bout de code qui ne fonctionne pas car toutes les valeurs de la colonne Num sont modifiées. Je veux juste l'enregistrement en cours.
HELP.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go create TRIGGER [dd] ON [dbo].[TEST] AFTER INSERT AS BEGIN SET NOCOUNT ON; DECLARE @N smallint set @n = (select max(num) from test); update Test set num = @N end go
Je ne suis pas sur de bien comprendre le besoin, il manquerait l'identifiant de la table à associer à la colonne num... je n'ai pas pu tester mais je pense que ça devrait être syntaxiquement correct, c'est surtout pour l'exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 create TRIGGER [dd] ON [dbo].[TEST] AFTER INSERT AS BEGIN update Test A set A.num = A.num + 1 Where A.num = (select max(B.num) from Test B) go
Explications :
Je travaille (en général) sous fireBird. Voici un exemple de TRIGGER :
Ce que je ne trouve pas en SQL SERVEUR c'est : new.NUM_ATTRIBUTION
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 as declare variable n_max smallint; begin select max(NUM_ATTRIBUTION) from attribution_huiles into : n_max; if (n_max is null ) then new.NUM_ATTRIBUTION = 1; Else New.NUM_ATTRIBUTION = n_max + 1 ; end
Cad, comment faut il nommer le champ qui subit l'action (UPDATE, INSERT, etc)
Bonsoir,
Dans ce cas, la solution de MacFurp convient.
Dans tous les cas vous avez besoin d'une colonne clé primaire sur votre table pour réaliser cela.
N'oubliez pas que votre trigger doit être ensembliste si vous voulez que cela fonctionne correctement, par exemple pour une insertion de 100000 lignes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE TRIGGER TR_AI_TEST ON dbo.TEST AFTER INSERT AS BEGIN UPDATE dbo.Test SET num = A.num + 1 FROM dbo.Test A JOIN INSERTED ON A.ID = INSERTED.ID END
Merci beaucoup,
Cordialement, Cyrille.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager