【问题标题】:Quickest way to fill SQL Table with Dummy Data [closed]用虚拟数据填充 SQL 表的最快方法
【发布时间】:2011-02-23 09:17:23
【问题描述】:

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

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

【问题讨论】:

    标签: sql sql-server dummy-data


    【解决方案1】:

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

    【讨论】:

    • 这真是太棒了!!!必须深入研究数据类型下拉菜单才能看到选项的灵活性。
    • 我厌倦了在我搜索的每个问题中看到这个链接,而且他们的网站无法正常工作。
    • @jzuhri 我刚刚测试了该站点并发现它可以正常工作。如果没有关于问题的适当反馈,这很难解决。会不会是因为某些不明原因阻止了该站点的防火墙?
    • @wittrup 前几天没有工作。刚刚再次检查它现在工作并且实际上很方便。谢谢。
    • 请不要只发布一些工具或库作为答案。至少在答案本身中展示how it solves the problem
    【解决方案2】:

    SQL Data Generator 来自 RedGate

    一键生成数据

    基于列和表名的真实数据

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

    消除数小时的繁琐工作

    完全支持 SQL Server 2008

    【讨论】:

    • 设置为 65 MB ?我们没有任何用于插入批量数据的低成本简单应用程序吗?
    • 现在是 116 MB 的试用版。
    • 这是一个付费解决方案,当然不是最快的
    • 我在现有数据库的每 100 个表中插入了 10000 行,其中包含 1-2 分钟内的数据。对我来说非常快速的工具,免费 14 天
    【解决方案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 具有相似结构的新表。

    注意:请记住,如果它有一个身份字段,请将其更改为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 条记录,这是一个很棒的模拟。

    【讨论】:

      【解决方案4】:

      答案较晚,但对本主题的其他读者可能有用。 除了其他解决方案,我还可以推荐使用 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 的第 3 方 SQL 数据生成器。该工具具有从导入的 .csv 格式文件生成大量随机数据的集成功能。该应用程序具有功能齐全的免费试用版,因此您可以下载并试用它是否适合您。

      【讨论】:

        【解决方案5】:

        http://filldb.info/dummy/ 效果最好。它提供完整的设置、选择生成多少行、“真实”的虚拟数据,所有这些都是免费的。

        我从未见过在这种情况下更有效或更好的方法。

        您可以使用易于使用的 GUI 生成整个数据库或仅生成一个表。它的设置和选项也非常精细,让您可以毫不费力地生成虚拟数据。 GUI 没有大小限制,而且数据类型选项非常丰富。

        要使用它,请导航到链接并插入定义表的 SQL 命令或使用它们的虚拟表。然后单击下一步并填写虚拟数据填充的行数据类型和设置。 然后单击下一步并生成数据。等待。完成后,下载数据库并将其导入您自己的数据库服务器。

        【讨论】:

        • 请不要只发布一些工具或库作为答案。至少在答案本身中展示how it solves the problem
        • 好的,只是接受的答案,第二个投票最多的答案也没有这样做。只是说......我什至解释了为什么它是一个很好的解决方案:完整的设置,选择创建多少行,真正的虚拟数据。我需要您演示如何使用该工具吗?那为什么其他的答案不包括呢?
        • 感谢您编辑答案。请注意,仅仅解释为什么它是一个好的解决方案还不够,您还需要演示如何使用该工具(正如您在上一段中所做的那样)。此外,您是对的,前 2 个得分答案仅是链接。我已将它们标记为 VLQ(这也是您可以为此类答案做的事情)。
        • 好的……以后发帖会记住的
        猜你喜欢
        • 1970-01-01
        • 2014-09-28
        • 1970-01-01
        • 1970-01-01
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-23
        相关资源
        最近更新 更多