Sélection de lignes dans SQL Server
La requête fournie ne parvient pas à renvoyer plus de 7 374 lignes car elle épuise le nombre de lignes dans le système. tableau de colonnes. Pour surmonter cette limitation, une approche plus efficace consiste à utiliser des CTE en cascade pour générer une « table de pointage » ou une « table de nombres ».
Voici une requête optimisée utilisant des CTE en cascade :
DECLARE @Range AS INT = 7374 ;WITH E1(N) AS( -- 10 ^ 1 = 10 rows SELECT 1 FROM(VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))t(N) ), E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b), -- 10 ^ 2 = 100 rows E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b), -- 10 ^ 4 = 10,000 rows E8(N) AS(SELECT 1 FROM E4 a CROSS JOIN E4 b), -- 10 ^ 8 = 10,000,000 rows CteTally(N) AS( SELECT TOP(@Range) ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) FROM E8 ) SELECT * FROM CteTally
Cette approche est incroyablement efficace car elle ne génère aucune lecture et s'adapte à un nombre extrêmement grand de lignes. Pour des comparaisons de performances et plus d'informations sur les tableaux de pointage, reportez-vous aux ressources liées fournies dans la réponse.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!