OVH Cloud OVH Cloud

Aide Trigger urgence

3 réponses
Avatar
MOD
Bonjour
Je voudrai à partir d'un trigger, calculer la valeur d'un champ, le remplir
avant de mettre à jour puis de retourner la valeur calculée. Je signale que
plusieurs personnes peuvent mettre à jour la table simultanément.

Merci de votre aide
--

======================
Mod
http://modiop.ifrance.com
======================

3 réponses

Avatar
Fred BROUARD
1) les trigger de SQL Server ne peuvent pas se déclencher AVANT
2) un trigger n'est pas destiné à renvoyer une valeur
3) un SGBDR est spécialement conçu pour gérer de manière transparente les
problèmes de concurrences

enfin, plutot que de mettre Urgence dans ton titre, poste nous tes tables, sous
forme d'ordre SQL et le résultat que tu veut obtenir...

A +

MOD a écrit:
Bonjour
Je voudrai à partir d'un trigger, calculer la valeur d'un champ, le remplir
avant de mettre à jour puis de retourner la valeur calculée. Je signale que
plusieurs personnes peuvent mettre à jour la table simultanément.

Merci de votre aide



--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
MOD
Rebonjour
Voila! J'ai une table TableA qui contient des champs suivant TableID
(compteur auto), NUM_DEC (qui est un compteur mais qui doit se réinitialiser
à chaque changement d'année) et d'autres champs sans importance pour mon pb
Je veux incrémenter le compteur de NUM_DEC manuellement en tenant compte du
changement d'année. Chaque insertion, je dois retourner la valeur de NUM_DEC
à celui qui fait l'insertion.
Voila!

Merci de vos idées


"Fred BROUARD" a écrit dans le message de
news:
1) les trigger de SQL Server ne peuvent pas se déclencher AVANT
2) un trigger n'est pas destiné à renvoyer une valeur
3) un SGBDR est spécialement conçu pour gérer de manière transparente les
problèmes de concurrences

enfin, plutot que de mettre Urgence dans ton titre, poste nous tes tables,


sous
forme d'ordre SQL et le résultat que tu veut obtenir...

A +

MOD a écrit:
> Bonjour
> Je voudrai à partir d'un trigger, calculer la valeur d'un champ, le


remplir
> avant de mettre à jour puis de retourner la valeur calculée. Je signale


que
> plusieurs personnes peuvent mettre à jour la table simultanément.
>
> Merci de votre aide

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************



Avatar
MOD
Finalement j'ai régler mon problème de ce manière, j'attends vos critiques
pour l'améliorant.
J'ai crée un champ ANNEE qui est toujours égal à la valeur de l'année en
cours (YEAR(GETDATE())
puis j'ai crée ce trigger:

CREATE TRIGGER VALEUR_NUMDECL ON dbo.DECLARATIONS
FOR INSERT
AS
BEGIN
DECLARE @NEWVAL int
DECLARE @DEC_ID int
DECLARE @DATEPASSEE datetime

Set @NEWVAL = (select MAX(NUM_DEC) FROM DECLARATIONS WHERE ANNEE (SELECT MAX(ANNEE) FROM DECLARATIONS) )

Set @DatePassee = (Select DATE_DEC FROM DECLARATIONS WHERE
NUM_DEC=@NEWVAL)


if Year(GetDate()) <> Year(@DatePassee) Set @NewVal = 1
If @NewVAL is null
Set @NewVal = 1
Else
Set @NewVal = @NewVal + 1
Set @dec_id = (select DEC_ID from inserted)
UPDATE DECLARATIONS SET NUM_DEC = @NewVal WHERE DEC_ID = @Dec_ID
SELECT @NewVal AS NEWVAL, @Dec_Id as DEC_ID
END


Ca marche pour le moment, mais peut être qu'on peut l'amélioré.

Merci d'avance


"MOD" a écrit dans le message de
news:
Bonjour
Je voudrai à partir d'un trigger, calculer la valeur d'un champ, le


remplir
avant de mettre à jour puis de retourner la valeur calculée. Je signale


que
plusieurs personnes peuvent mettre à jour la table simultanément.

Merci de votre aide
--

===================== > Mod
http://modiop.ifrance.com
===================== >