Bonjour à tous,

Je suis sur sql-Server depuis quelques mois je suis encore en mode découverte, je me suis mis au trigger et j'avoue avoir beaucoup de mal ....

Tout d'abord j'ai parcouru le forum et rencontré pas mal ce problème. Mais je n'arrive pas à mettre en place la solution.

Le voici :
- j'ai une table A qui comprend des articles. Les utilisateurs peuvent voter pour ces articles. Dans ce cas un inert dans la table B valide le vote.
- A l'insertion du vote, je souhaite utiliser un declencheur qui va modifier un champ classement dans tous les enregistrements de la table A en fonction du nombre de vote.

Voici mon code, merci d'être indulgent.

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
21
22
23
24
25
26
27
28
29
30
31
32
 
USE [DB]
GO
 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tr_vote] ON [dbo].[VOTE]  AFTER INSERT as
 
DECLARE 
@i int,
@VOTE int,
@ID_ARTICLE int;
 
BEGIN
set @i = 1
 
DECLARE MyCursor CURSOR FOR
 
select w.ID_ARTICLE,(select count(*) from VOTE where RESULTAT_VOTE=1 and ID_ARTICLE=w.ID_ARTICLE) as nb_vote from ARTICLE w left join VOTE v on w.ID_ARTICLE=v.ID_ARTICLE order by nb_vote desc ,w.ID_ARTICLE desc
open MyCursor
fetch MyCursor into @ID_ARTICLE, @VOTE
WHILE @@FETCH_STATUS = 0
begin
update ARTICLE set CLASSEMENT= @i where ID_ARTICLE=@ID_ARTICLE
SET @i = @i + 1
fetch MyCursor into @ID_ARTICLE, @VOTE
end
close MyCursor
DEALLOCATE MyCursor
END
Donc le trigger se lance mais l'insertion ne se fait pas.... Est ce du au curseur ?
D'avance merci de m'eclairer.

Amicalement.
Bob