Maison >base de données >tutoriel mysql >Comment puis-je sélectionner efficacement un nombre spécifique de lignes dans SQL Server, même au-delà de la limite sys.all_columns ?
Dans SQL Server, la sélection d'un nombre spécifique de lignes peut être obtenue à l'aide de la fonction ROW_NUMBER(). Cependant, il existe des limites au nombre de lignes pouvant être renvoyées.
La requête initiale fournie ne spécifie pas de table spécifique dans laquelle sélectionner les lignes. Lors de l'exécution de cette requête sur sys.all_columns, elle ne renverra que jusqu'à 7 374 lignes, car il s'agit du nombre total de lignes dans cette table.
Pour sélectionner un plus grand nombre de lignes , des méthodes alternatives peuvent être utilisées :
Utiliser un numéro Tableau :
DECLARE @start INT = 1; DECLARE @end INT = 10; WITH numbers AS ( SELECT @start AS number UNION ALL SELECT number + 1 FROM numbers WHERE number < @end ) SELECT * FROM numbers OPTION (MAXRECURSION 0);
En utilisant un tableau numérique, un nombre infini de lignes peut être généré. Cependant, cette approche peut être relativement lente.
Pour améliorer les performances, des CTE en cascade peuvent être utilisés pour créer une table de pointage :
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 capable de générer un grand nombre de lignes avec zéro lecture. Pour plus de comparaisons de performances et de détails supplémentaires sur les tableaux de pointage, reportez-vous aux liens fournis 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!