J'essaie d'exécuter une requête dynamique dans une boucle while dans SQL/PDW. Cette requête me donnera les dates max/min ainsi que le nombre distinct de dates d'une table de faits. J'ai besoin d'exécuter ceci pour tous les schémas dans ma base de données (tous les schémas ont la même structure de table). La requête que je suis en train d'exécuter est donnée ci-dessous:Exécuter une requête dynamique dans une boucle dans SQL
DECLARE @intCNT INT
SET @intCNT = 1
DECLARE @strSQL1 VARCHAR(1000)
DECLARE @strSQL2 VARCHAR(1000)
DECLARE @strSQL3 VARCHAR(100)
SET @strSQL1 = 'SELECT MAX(FT_DT) AS MAX_DT,
MIN(FT_DT) AS MIN_DT,
COUNT(DISTINCT FT_DT) AS DT_CNT
FROM '
SET @strSQL2 = CONCAT('(SELECT TABLE_SCHEMA
FROM
(SELECT ROW_NUMBER() OVER(ORDER BY TABLE_SCHEMA) AS ROW_NUM,
TABLE_SCHEMA
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = ''FT_TBL''
AND TABLE_SCHEMA LIKE ''F%'')T
WHERE ROW_NUM = ',@intCNT,')')
SET @strSQL3 = '.FT_TBL'
EXEC (@strSQL1 + @strSQL2 + @strSQL3)
Quand j'exécute, je reçois l'erreur suivante:
Msg 102, Level 15, State 1, Line 11
Incorrect syntax near '.'.
Est-il quelque chose à voir avec la syntaxe? J'aimerais que cela fonctionne sur mon instance PDW. J'ai essayé dans SQL Server aussi, mais obtenir la même erreur
Je ne sais pas ce que vous faites avec la troisième partie, vous avez besoin pour exécuter strSQL2, puis l'ajouter comme nom de table à strSQL1, ce qui rendrait votre requête en sélection * à partir de "nom généré à partir du résultat de la sous-requête". –
Un outil important dans l'utilisation de SQL dynamique est l'instruction PRINT. IMPRIMEZ la ou les chaîne (s) SQL que vous essayez d'exécuter, et les erreurs de syntaxe seront généralement évidentes. –
Ce dont j'ai besoin, c'est de "sélectionner ---- de .FT_TBL" pour tous les schémas. J'ai besoin d'avoir le jeu de résultats complet enregistré dans un tableau à la fin de l'exécution. –