Bonjour,
Pour optimiser un peu votre requête, vous pourriez mettre
à la place de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 WHERE RIGHT(LEFT( REPLACE( 'UPDATE Table1 SET' + CASE WHEN (DELETED.CHAMP1 <> INSERTED.CHAMP1 AND INSERTED.CHAMP1 IS NOT NULL AND INSERTED.CHAMP1 <> '') THEN ' ,CHAMP1 = ' + QUOTENAME((INSERTED.CHAMP1),'''') ELSE '' END + CASE WHEN (DELETED.CHAMP1 IS NOT NULL AND INSERTED.CHAMP1 IS NULL) THEN ' ,CHAMP1 = NULL' ELSE '' END + CASE WHEN (DELETED.CHAMP2 <> INSERTED.CHAMP2 AND INSERTED.CHAMP2 IS NOT NULL AND INSERTED.CHAMP2<> '') THEN ' ,CHAMP2 = ' + QUOTENAME((INSERTED.CHAMP2),'''') ELSE '' END + CASE WHEN (DELETED.CHAMP2 IS NOT NULL AND INSERTED.CHAMP2 IS NULL) THEN ' ,CHAMP2 = NULL' ELSE '' END + ' WHERE CHAMPCLEF = ' + QUOTENAME((INSERTED.CHAMPCLEF),''''), 'SET ,','SET ' ) , 20, 6) --la clause <> 'SET WH'
LIKE et NOT LIKE ne sont pas ce qu'il y a de plus performant dans le traitement des chaînes de caractères.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 WHERE ... NOT LIKE '%SET WHERE%'
Il faut faire attention à l'utilisation des triggers. C'est très pratique mais ça peut entrainer des problèmes de lenteurs et de blocages.
--> entre autre garder à l'esprit que INSERTED et DELETED sont des tables temporaires non indexées.
Partager