SQL Server では、ROW_NUMBER() 関数を使用して特定の行数を選択できます。ただし、返される行の数には制限があります。
提供された最初のクエリでは、行を選択する特定のテーブルが指定されていません。このクエリを sys.all_columns に対して実行すると、テーブル内の合計行数は 7374 行までしか返されません。
より多くの行を選択するには、代替方法を使用することもできます:
数値を使用するテーブル:
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);
Numbers Table を使用すると、無限の行を生成できます。ただし、このアプローチは比較的時間がかかる可能性があります。
パフォーマンスを向上させるために、カスケード CTE を使用して集計テーブルを作成できます。
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
このアプローチでは、読み取りゼロで膨大な数の行を生成できます。パフォーマンスの比較と集計テーブルの詳細については、応答内のリンクを参照してください。
以上がsys.all_columns の制限を超えている場合でも、SQL Server で特定の数の行を効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。