如何利用SQL查询返回庞大的整数序列表

【字号: 日期:2023-07-18浏览:19作者:雯心

WITH Digits AS ( SELECT 0 as Number UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) SELECT (d5.Number * 100000) + (d4.Number * 10000) + (d3.Number * 1000) + (d2.Number * 100) + (d1.Number * 10) + d0.Number as NumberFROM Digits AS d0 , Digits AS d1 , Digits AS d2 , Digits AS d3 , Digits AS d4 , Digits AS d5在SQLServer 2005中,这个SQL返回一个包含1000000条记录的结果集,从0到999999。这条语句利用了SQL2005的新功能:CTE (Common Table Expression)如果当前的数据库是SQL 2000或其他不支持CTE的数据库,则可以将WITH部分的SQL定义为一个视图。

CREATE VIEW .[Digits] ASSELECT 0 AS NumberUNION SELECT 1UNION SELECT 2UNION SELECT 3UNION SELECT 4UNION SELECT 5UNION SELECT 6UNION SELECT 7UNION SELECT 8UNION SELECT 9;

CREATE VIEW [MillionNumbers] ASSELECTSELECT (d5.Number * 100000) + (d4.Number * 10000) + (d3.Number * 1000) + (d2.Number * 100) + (d1.Number * 10) + d0.Number) as NumberFROM Digits AS d0 , Digits AS d1 , Digits AS d2 , Digits AS d3 , Digits AS d4 , Digits AS d5;

我们可以用这个方法来生成大批量的测试数据。如:INSERT INTO MyTest (RecordId, RecordIndex)SELECT newid(), Number FROM MillionNumbers

用此方法插入数据,要比利用循环快很多倍。

相关文章: