Java 如何有效地增加测试数据的大小

Java 如何有效地增加测试数据的大小,java,sql-server,database,Java,Sql Server,Database,我有一个大约100次拍卖的数据库。我想创建一个工具,将我的数据库扩展到10000或100000的销售额。我需要这个用于测试目的。我正在使用java和SQLServer2005。原始数据将来自一个数据库备份文件,该文件将被还原,然后进行操作以增大大小。增加我的数据大小最有效的方法是什么?如果没有任何标识列,可以执行以下操作: INSERT INTO Sales SELECT S.* FROM Sales S CROSS JOIN (SELECT 1 L UNIO

我有一个大约100次拍卖的数据库。我想创建一个工具,将我的数据库扩展到10000或100000的销售额。我需要这个用于测试目的。我正在使用java和SQLServer2005。原始数据将来自一个数据库备份文件,该文件将被还原,然后进行操作以增大大小。增加我的数据大小最有效的方法是什么?

如果没有任何标识列,可以执行以下操作:

INSERT INTO Sales
SELECT  
    S.*
FROM    
    Sales S
    CROSS JOIN (SELECT 1 L UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) Factor

这是一种快速且非常简单的方法:

首先,我将使用一些现有数据对您的表进行模拟:

DECLARE @YourRealTable TABLE(ID INT IDENTITY,SomeValue VARCHAR(100));
INSERT INTO @YourRealTable VALUES
 ('One existing value 1'),('One existing value 2')
,('One existing value 3'),('One existing value 4');
--以下CTE将在微秒内创建多达10^9个运行数字

--让我们插入~4000(存在4次1000)

--现在,您可以享受约4000条类似记录:

SELECT * FROM @YourRealTable;

创建一些测试数据并生成一个sql脚本来插入这些数据。 然后,您必须处理钥匙等,以获得正确的ID。 然后运行脚本,就完成了。
如果需要新的或更多的数据,请重复此操作。

使用,同时使用

DECLARE @Id INT=1

WHILE @Id<5
BEGIN
    INSERT INTO Sales
    SELECT * FROM Sales
    SET @Id=@Id+1;      
END
声明@Id INT=1

虽然@IdBy高效,但您的意思是代码行数最少吗?或者输入大量数据的最快方式?您要求重复数据,请发布一些示例方案。对于我来说,效率是输入大量数据的最快方式。我有标识列。我可以“在重复密钥更新时”吗?是否可以将
set
insert
一起使用?@talex这是两条独立的语句,而不是一条单独的语句。
DECLARE @Id INT=1

WHILE @Id<5
BEGIN
    INSERT INTO Sales
    SELECT * FROM Sales
    SET @Id=@Id+1;      
END