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

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

谢谢!

有帮助吗?

解决方案

SQL数据生成器 由Redgate

单击数据生成

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

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

消除了数小时的繁琐工作

SQL Server 2008的全面支持

其他提示

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

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

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

如果需要数千行填充,并且.csv文件包含几百行数据,则还不够。解决方法一遍又一遍地重新介绍相同的.CSV文件,直到需要。该方法的缺点是,它将在不随机化的情况下将大块的行插入大块行。

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

您只需要 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是身份,则查询会如下:

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次,您可以或多或少地将其更改为或多或少,但请注意,它可能会根据您的计算机硬件进行持续的minuets:

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

  1. 过了一会儿,您有一张带有虚拟行的桌子!

正如@sqlmenace所提到的那样,Redgate数据生成器是实现它的好工具,价格为369美元,虽然有14天的试用机会。

好处是,Redgate标识外国钥匙,因此您可以在查询中应用JOIN。

您有很多选项,可让您确定应该如何填充每一列,每列都会在语义上进行预测,以便建议使用相关数据,例如,如果您有一个名为“部门”的列,则不会被怪异填充字符,它充满了诸如“技术”,“ Web”,“客户”等的表达式。即使您可以使用正则表达式来限制选定的字符。

我用超过10,000,000张唱片填充了我的桌子,这是一个很棒的模拟。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top