Sql server 2008 编程入门经典(3):创建大量测试数据的方法

以下摘自《sql server 2008 编程入门经典》:

 

每次教 SQL 课程时,关于交叉连接,总有人提问:“为什么要使用交叉连接?”。本人所知的是交叉连接的科学用途,知道高等数学里边有使用许多笛卡尔积的函数。假设您读过大量的表结构示例,然后执行交叉连接,那么可以建立示例数据的笛卡尔积。但是通常使用交叉连接来建立测试数据。

 

当建立数据库时,数据库通常是大规模系统的一小部分,而系统需要大量的测试。测试大规模系统的一个常见问题是要创建大量的测试数据。使用交叉连接,只要将少量的数据项输出到两个或多个表中,然后对这些表执行交叉连接就可产生大量的测试数据。在上一查询示例中,如果将一组地址与一组供应商匹配,则简单的查询语句从 8 个记录生成了 15 个记录。当然使用交叉可生成非常大的数据量。例如,如果建立了一个有 50 个名的表,在建立有 250 个姓的表,则使用交叉连接可建立 12500 个不同姓名组合的表。这意味着通过数据 300 个姓和名,就可以立即得到一组 12500 个名字的测试数据。

 

 

有以下有名的 sql 语句:

 

 

--自然数表1-1M CREATE TABLE Nums(n int NOT NULL PRIMARY KEY CLUSTERED) --书上介绍了很多种填充方法,以下是最高效的一种,需要SS2005的ROW_NUMBER()函数。 WITH B1 AS(SELECT n=1 UNION ALL SELECT n=1), --2 B2 AS(SELECT n=1 FROM B1 a CROSS JOIN B1 b), --4 B3 AS(SELECT n=1 FROM B2 a CROSS JOIN B2 b), --16 B4 AS(SELECT n=1 FROM B3 a CROSS JOIN B3 b), --256 B5 AS(SELECT n=1 FROM B4 a CROSS JOIN B4 b), --65536 CTE AS(SELECT r=ROW_NUMBER() OVER(ORDER BY (SELECT 1)) FROM B5 a CROSS JOIN B3 b) --65536 * 16 INSERT INTO Nums(n) SELECT TOP(1000000) r FROM CTE ORDER BY r

你可能感兴趣的:(JOIN,sql,编程,数据库,server,测试,insert)