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.
Version imprimable
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:
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:
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:
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:
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:
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_ATTRIBUTIONCode:
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:
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.