Bonjour à tous.
J'ai un problème lors de mes udates/deletes sur mes déclencheurs.

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
 
 
IF @EtatTrigger = 2 -- Dans le cas d'un Update. 
BEGIN
 
	SET @MyReqInstruction = 'UPDATE MyTable '
	SET @MyReqValue = 'SET '
 
	If (SELECT CHAMP1 FROM DELETED) <> (SELECT CHAMP1 FROM INSERTED)
	BEGIN
		IF len(@MyReqValue) > 4 SET @MyReqValue = (@MyReqValue + ', ')
		SET @MyReqValue += ('CHAMP1 = ' + QUOTENAME((SELECT CHAMP1 FROM INSERTED),''''))
	END
 
	If (SELECT CHAMP2 FROM DELETED) <> (SELECT CHAMP2 FROM INSERTED)
	BEGIN
		IF len(@MyReqValue) > 4 SET @MyReqValue = (@MyReqValue + ', ')
		SET @MyReqValue += ('CHAMP2 = ' + QUOTENAME((SELECT CHAMP2 FROM INSERTED),''''))
	END
 
	If (SELECT CHAMP3 FROM DELETED) <> (SELECT CHAMP3 FROM INSERTED)
	BEGIN
		IF len(@MyReqValue) > 4 SET @MyReqValue = (@MyReqValue + ', ')
		SET @MyReqValue += ('CHAMP3 = ' + QUOTENAME((SELECT CHAMP3 FROM INSERTED),''''))
	END
 
...
...
...
END
Enfait, lorsque mon déclencheur capte une requête, je veux la réécrire (car impossible à capter directement si elle provient d'une requête paramétré..) et la stocker dans une autre table.

Cependant, dans le cas ou il y'a un Update sur plusieurs rows (une seule instruction donc) cela pose problème.

J'aimerais donc idéalement faire un "for each" visiblement impossible en sql et ne tiens pas à utiliser les curseurs.

Mes recherches se sont révélés infructueuses, si quelqu'un à une idée..
Merci à vous.

A+