WEB开发网
开发学院数据库MSSQL Server 如何利用SQL查询返回庞大的整数序列表 阅读

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

 2007-11-11 12:12:10 来源:WEB开发网   
核心提示: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 SELE

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

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

Tags:如何 利用 SQL

编辑录入:coldstar [复制链接] [打 印]
赞助商链接