Comment ne pas utiliser une #table
Bonjour,
Pour faire une jointure sur une table avec l'OUTPUT d'un UPDATE, je suis obligé d'utiliser par une #table:
Code:
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 |
Car si j'écris :
Code:
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 |
j'ai une erreur qui me dit que la variable @maTable_tempo doit être déclarée.
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 :cry: ?