使用虚拟数据填充SQL表的最快方法

时间:2010-05-24 19:26:24

标签: sql sql-server dummy-data

用虚拟数据填充SQL表的最快方法是什么?

我有一个包含大约40个不同类型字段(int,bit,varchar等)的宽表,需要进行一些性能测试。我正在使用SQL Server 2008。

谢谢!

4 个答案:

答案 0 :(得分:41)

推荐免费的GNU许可随机自定义数据生成器http://www.generatedata.com/

答案 1 :(得分:18)

RedGate

SQL Data Generator

一键生成数据

基于列名和表名的真实数据

如果需要,可以自定义数据

消除繁琐的工作时间

完全支持SQL Server 2008

答案 2 :(得分:10)

迟到的答案但对此线程的其他读者可能有用。 除了其他解决方案,我建议使用SSMS或自定义SQL导入脚本程序从.csv文件导入数据。有关如何执行此操作的分步教程,因此您可能需要查看它:http://solutioncenter.apexsql.com/how-to-generate-randomized-test-data-from-a-csv-file/

请注意,使用SSMS或自定义SQL导入脚本导入.csv文件比手动创建SQL插入更容易,但是存在一些限制,如教程中所述:

  

如果需要填充数千行,并且.csv文件包含几百行数据,那还不够。解决方法是反复重新导入相同的.csv文件,直到需要为止。这种方法的缺点是它会插入具有相同数据的大块行,而不会随机化它们。

本教程还介绍了如何使用名为ApexSQL Generate的第三方SQL数据生成器。该工具具有集成功能,可从导入的.csv格式文件生成大量随机数据。应用程序具有功能齐全的免费试用版,因此您可以下载并试用它以查看它是否适合您。

答案 3 :(得分:3)

您在INSERT之后只需要Go 1000,填写1000次,就像这样:

INSERT INTO dbo.Cusomers(Id, FirstName, LastName) VALUES(1, 'Mohamed', 'Mousavi')
GO 1000

它将创建一个包含1000个相同行的表。另一种解决方案是,您可以使用一些数据填充表格的第一行,然后通过反复重复第一行来填充下一行表格,这意味着您自己填充表格:

INSERT INTO dbo.Customers
SELECT * FROM dbo.Customers 
GO 10

如果一个或多个列是标识(意味着它们接受唯一值,如果它是自动增量的),则只是不将它放在查询中,例如,如果dbo.Customer中的Id是标识,则查询进行像这样:

INSERT INTO dbo.Customers
SELECT FirstName, Last Name FROM dbo.Customers
GO 10

取代:

INSERT INTO dbo.Customers
SELECT Id, FirstName, Last Name FROM dbo.Customers
GO 10

否则你会遇到这个错误:

An explicit value for the identity column in table 'dbo.Customers' can only be specified when a column list is used and IDENTITY_INSERT is ON.

注意: 这是一种算术级数,所以它会持续一点,不要在GO前使用大数字。

如果你想要一个更精细的表格,那么你可以通过执行一个简单的查询并按照以下步骤以相同的方式实现:

  1. 选择一个行数非常多的表,例如dbo.Customers

  2. 右键单击它并选择Script Table as > Create To > New Query Editor Window

  3. 将您的新表命名为dbo.CustomersTest,现在您可以执行查询以获得与dbo.Customers具有相似结构的新表。

  4. 注意:请记住,如果它有一个标识字段,请更改它Identity Specification to No因为您应该重复填充原始数据的新表。

    1. 运行以下查询,它将运行1000次,您可以更多或更少地将其更改,但请注意它可能会基于您的计算机硬件持续使用minuets:
    2. INSERT INTO [dbo].[CustomersTest] SELECT * FROM [dbo].[Customers] GO 1000

      1. 过了一会儿,你有一张带虚拟行的桌子!
      2. 正如@SQLMenace所提到的,RedGate数据生成器是一个很好的工具来实现它,它需要369美元,你有14天的试用机会虽然。

        好的一点是,RedGate会识别外键,因此您可以在查询中应用JOIN。

        你有很多选项可以让你决定如何填充每一列,每个列都是在语义上预期的,以便建议相关的数据,例如,如果你有一个名为'Department'的列,它不是由奇怪的字符填充,它由“技术”,“Web”,“客户”等表达式填充。甚至您可以使用正则表达式来限制所选字符。

        我用超过10,000,000条记录填充了我的表格,这是一个非常棒的模拟。