44

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

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

4

5 回答 5

58

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

于 2013-08-21T00:52:13.020 回答
24

RedGate 的SQL 数据生成器

一键生成数据

基于列和表名的真实数据

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

消除数小时的繁琐工作

完全支持 SQL Server 2008

于 2010-05-24T19:28:43.307 回答
15

您只需要Go 1000在 INSERT 之后填充 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 类似结构的新表。

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

  1. 运行以下查询,它将运行 1000 次,您可以将其更改为或多或少,但请注意它可能会根据您的计算机硬件持续小步舞:

INSERT INTO [dbo].[CustomersTest] SELECT * FROM [dbo].[Customers] GO 1000

  1. 过了一会儿,你有一张桌子,里面有虚拟行!

正如@SQLMenace 提到的,RedGate 数据生成器是实现它的好工具,它的价格为 369 美元,但您有 14 天的试用机会。

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

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

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

于 2017-05-13T06:46:16.117 回答
10

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

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

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

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

于 2015-12-11T09:53:44.947 回答
-2

http://filldb.info/dummy/效果最好。完整的设置,选择生成多少行,“真实”的虚拟数据,免费。

在这种情况下,我从未见过更有效或更好的东西(免费!!)

于 2022-03-05T08:55:55.827 回答