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

王朝mssql·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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 Number

FROM

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] 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;

CREATE VIEW [MillionNumbers] AS

SELECT

SELECT (d5.Number * 100000)

+ (d4.Number * 10000)

+ (d3.Number * 1000)

+ (d2.Number * 100)

+ (d1.Number * 10)

+ d0.Number) as Number

FROM

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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航