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

Ale*_*lex 32 sql sql-server dummy-data

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

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

谢谢!

wit*_*rup 45

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

  • 这真是太棒了!!! 必须深入了解数据类型下拉列表以查看选项的灵活性. (3认同)

SQL*_*ace 18

RedGate的SQL数据生成器

一键创建数据

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

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

消除数小时的繁琐工作

完全支持SQL Server 2008

  • 设置为65 MB?我们没有任何低成本的简单应用程序来插入批量数据吗? (7认同)

小智 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的第三方SQL数据生成器.该工具具有集成功能,可从导入的.csv格式文件生成大量随机数据.应用程序具有功能齐全的免费试用版,因此您可以下载并试用它以查看它是否适合您.


Moh*_*avi 7

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

INSERT INTO dbo.Cusomers(Id, FirstName, LastName) VALUES(1, 'Mohamed', 'Mousavi')
GO 1000
Run Code Online (Sandbox Code Playgroud)

它将创建一个包含1000个相同行的表。

另一种解决方案是,您可以用一些数据填充表的开始行,然后通过重复重复开始的行来填充表的下一行,这意味着您可以自己填充表:

INSERT INTO dbo.Customers
SELECT * FROM dbo.Customers 
GO 10
Run Code Online (Sandbox Code Playgroud)

如果一列或多列是身份(如果它们是自动递增的,则表示它们接受唯一值),则只需将其放在查询中,例如,如果dbo.Id中的Id是客户,则查询如下所示:

INSERT INTO dbo.Customers
SELECT FirstName, Last Name FROM dbo.Customers
GO 10
Run Code Online (Sandbox Code Playgroud)

代替:

INSERT INTO dbo.Customers
SELECT Id, FirstName, Last Name FROM dbo.Customers
GO 10
Run Code Online (Sandbox Code Playgroud)

否则,您将遇到此错误:

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。

  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 Data Generator是实现它的一个很好的工具,它的价格为369美元,尽管您有14天的试用机会。

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

您有很多选择,可以决定应该如何填充每一列,应该在语义上预期每一列,以便建议相关数据,例如,如果您有一个名为“部门”的列,则不会被奇怪的填充字符,用“技术”,“ Web”,“客户”等表达式填充。即使您可以使用正则表达式来限制所选字符。

我用超过10,000,000条记录填充了表格,这真是一个了不起的模拟。