Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article vous fournit des conseils essentiels pour utiliser des boucles T-SQL, remplacer des curseurs et développer des solutions associées avec Synapse SQL.
Objectif des boucles WHILE
Synapse SQL prend en charge la boucle WHILE pour exécuter plusieurs fois des blocs d’instructions. Cette boucle WHILE continue tant que les conditions spécifiées sont vraies ou jusqu’à ce que le code termine spécifiquement la boucle à l’aide du mot clé BREAK.
Les boucles dans Synapse SQL sont utiles pour remplacer les curseurs définis dans le code SQL. Heureusement, presque tous les curseurs écrits dans le code SQL sont de type avancé rapide, en lecture seule. Par conséquent, les boucles WHILE constituent une excellente alternative pour remplacer les curseurs.
Remplacer les curseurs dans Synapse SQL
Avant de vous plonger, la question suivante doit être prise en compte : « Ce curseur peut-il être réécrit pour utiliser des opérations basées sur un ensemble ? » Dans de nombreux cas, la réponse est oui et est souvent la meilleure approche. Une opération ensembliste s'exécute souvent plus rapidement qu'une approche itérative, ligne après ligne.
Les curseurs en lecture seule anticipée sont facilement remplacés par une structure de boucle. Le code suivant est un exemple simple. Cet exemple de code met à jour les statistiques pour chaque table de la base de données. En itérant sur les tables de la boucle, chaque commande s’exécute en séquence.
Tout d’abord, créez une table temporaire contenant un numéro de ligne unique utilisé pour identifier les instructions individuelles :
CREATE TABLE #tbl
WITH
( DISTRIBUTION = ROUND_ROBIN
)
AS
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Sequence
, [name]
, 'UPDATE STATISTICS '+QUOTENAME([name]) AS sql_code
FROM sys.tables
;
Ensuite, initialisez les variables requises pour exécuter la boucle :
DECLARE @nbr_statements INT = (SELECT COUNT(*) FROM #tbl)
, @i INT = 1
;
Passez maintenant en revue les déclarations en les exécutant une par une :
WHILE @i <= @nbr_statements
BEGIN
DECLARE @sql_code NVARCHAR(4000) = (SELECT sql_code FROM #tbl WHERE Sequence = @i);
EXEC sp_executesql @sql_code;
SET @i +=1;
END
Enfin, supprimez la table temporaire créée à la première étape
DROP TABLE #tbl;
Étapes suivantes
Pour obtenir des conseils supplémentaires, consultez la vue d’ensemble du développement.