Trigger avec colonne incrémentée conditionnellement
Désolé pour le titre pas très clair, je vais essayer d'expliquer :
Je voudrais lors de l'insertion d'un nouvel enregistrement dans une table incrémenter automatiquement une des colonnes de la clé primaire en fonction des autres colonnes de la clé primaire.
J'ai une table :
Code:
1 2 3 4 5 6 7 8
|
CREATE TABLE dbo.MATABLE (
CLE int NOT NULL,
NUM int NOT NULL,
DM DATETIME,
ORDRE int DEFAULT 1 NOT NULL,
LIBELLE VARCHAR(100),
PRIMARY KEY (CLE,NUM,DM,ORDRE)); |
Et je voudrais que lorsque que j'insère des lignes du style :
Code:
INSERT INTO MATABLE (CLE,NUM,DM,LIBELLE) VALUES (1000,1000,CURRENT_TIMESTAMP),(1000,1000,CURRENT_TIMESTAMP)
où les 3 premières colonnes de la clé primaire sont identiques, faire pour que la 4eme colonne (ORDRE) s'incrémente à chaque ligne insérée.
J'ai voulu le faire dans un TRIGGER FOR INSERT, mais ça ne fonctionne pas, même en utilisant ROW_NUMBER.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
CREATE TRIGGER dbo.MONTRIGGER ON dbo.MATABLE
FOR INSERT
AS
begin
DECLARE @MAXORDRE int
SET @MAXORDRE = (SELECT isNull(MAX(a.ORDRE),0) FROM dbo.MATABLE a JOIN INSERTED i on i.cle=a.cle and i.num= a.num);
with tmptable as
(select ROW_NUMBER()OVER(ORDER BY i.cle,i.num,i.dm DESC) as nbrow,* from inserted i )
UPDATE a
SET ORDRE = @MAXORDRE + tmptable.nbrow
FROM
tmptable
INNER JOIN dbo.MATABLE a ON
a.cle = tmptable.cle and a.num=a.num and a.dm = tmptable.dm
end |
Quelqu'un aurait-il une idée ?