Bonjour,
Pour faire une jointure sur une table avec l'OUTPUT d'un UPDATE, je suis obligé d'utiliser par une #table:
Car si j'écris :
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 ALTER PROCEDURE maProc @monParam1 INT = 50 @monParam2 TINYINT AS BEGIN DECLARE @SQL VARCHAR(1200) SET @SQL = ' CREATE TABLE #maTable_tempo ( maListeDeColonnes ) UPDATE TOP (' + CONVERT(VARCHAR(10), @monParam1) + ') maTable1 SET maColonne1 = 1 OUTPUT INSERTED.* INTO #maTable_tempo WHERE maColonne2 = 0 AND maColonne3 = ' + CONVERT(VARCHAR(10), @monParam2) + ' AND SENDDATETIME < GETDATE() SELECT *, CURRENCY + CONVERT(VARCHAR(10), CONVERT(INT, PRICE)) TARIFF FROM #maTable_tempo JOIN dbo.maTable2 (nolock) ON maTable2.maColonneDeJointure = #maTable_tempo.maColonneDeJointure ORDER BY autreColonne1, autreColonne2 DESC DROP TABLE #maTable_tempo' EXEC (@SQL); END
j'ai une erreur qui me dit que la variable @maTable_tempo doit être déclarée.
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 ALTER PROCEDURE maProc @monParam1 INT = 50 @monParam2 TINYINT AS BEGIN DECLARE @SQL VARCHAR(1100) SET @SQL = ' DECLARE @maTable_tempo TABLE ( maListeDeColonnes ); UPDATE TOP (' + CONVERT(VARCHAR(10), @monParam1) + ') maTable1 SET maColonne1 = 1 OUTPUT INSERTED.* INTO @maTable_tempo WHERE maColonne2 = 0 AND maColonne3 = ' + CONVERT(VARCHAR(10), @monParam2) + ' AND SENDDATETIME < GETDATE() SELECT *, CURRENCY + CONVERT(VARCHAR(10), CONVERT(INT, PRICE)) TARIFF FROM @maTable_tempo JOIN dbo.maTable2 (nolock) ON maTable2.maColonneDeJointure = @maTable_tempo.maColonneDeJointure ORDER BY autreColonne1, autreColonne2 DESC' EXEC (@SQL); END
Mon problème avec la #maTable_tempo, c'est que si maProc est appelée plusieurs fois, ça va planter puisque l'objet #maTable_tempo sera déjà existant.
Je pense être obligé d'utiliser une table temporaire puisque je dois faire un ORDER BY sur l'OUTPUT de mon UPDATE. Je suis également obligé de faire ma jointure pour récupérer les colonnes CURRENCY et PRICE.
Y'a-t-il un solution?
Partager