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

标签 sql sql-server dummy-data

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

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

最佳答案

您只需在 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

否则你会遇到这个错误:

仅当使用列列表且 IDENTITY_INSERT 为 ON 时,才能指定表“dbo.Customers”中标识列的显式值。

注意: 这是一种算术级数,因此会持续一段时间,不要在 GO 前面使用很大的数字。

如果您想要一个填充得更详细的表,那么这次您可以通过执行一个简单的查询并按照以下步骤以相同的方式实现这一点:

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

  2. 右键单击它并选择将表脚本为 > 创建到 > 新查询编辑器窗口

  3. 将您的新表命名为其他名称,例如 dbo.CustomersTest,现在您可以执行查询以创建一个与 dbo.Customers 具有相似结构的新表。

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

  • 运行以下查询,它将运行 1000 次,您可以将其更改为更多或更少,但请注意,根据您的计算机硬件,它可能会持续几分钟:
  • 插入 [dbo].[CustomersTest] SELECT * FROM [dbo].[Customers] GO 1000

  • 过了一会儿,您就会得到一个包含虚拟行的表!
  • <小时/>

    正如 @SQLMenace 提到的,RedGate Data Generator 是一个很好的工具来实现它,它的价格为 369 美元,但你有 14 天的试用机会。

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

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

    我在表中填充了超过 10,000,000 条记录,这是一次很棒的模拟。

    关于sql - 用虚拟数据填充 SQL 表的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2899654/

    相关文章:

    php - Doctrine 和 Symfony2 : WHERE a. title LIKE $array

    python - 修改表中的所有行

    sql-server - 什么是 "Instead of"触发器?

    sql - 显示查询中 SQL Server 代理运算符的列表

    python - 使用实际值创建虚拟列

    java - 从 SQL 中的单独表中获取 ID

    MySQL 预定义值

    r - 选择到临时表

    mysql - 如何在 MySQL Workbench 中使用虚拟数据填充现有数据库?