【问题标题】:How can I populate my database's all tables with random data?如何使用随机数据填充数据库的所有表?
【发布时间】:2013-03-14 13:24:02
【问题描述】:

有这样的软件吗?数据本身是否有意义并不重要。我只是担心这些领域会被填充。基本上,它将读取表定义并相应地生成一些数据。如果它询问每个表要插入多少行,默认值是留空还是填充,如何处理 varchars(完全或最多给定的指定字符数),那也很棒.理想情况下是免费的 :) 但也非常欢迎商业产品建议。 谢谢大家。

【问题讨论】:

标签: sql-server database sql-server-2008 sql-server-2008-r2 relational-database


【解决方案1】:

SQL 数据生成器 提供真实的测试数据,您可以从以下网站下载 http://www.red-gate.com/products/sql-development/sql-data-generator/

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      有大量用于为 SQL Server 生成测试数据的工具。 因此,您不必通过某种方式构建自己的逻辑来手动执行此操作。 请查看http://www.kodyaz.com/articles/tools-sql-server-tool-list.aspx的测试数据生成器部分

      【讨论】:

        【解决方案4】:

        对于 mysql 数据库,您可以使用filldb.info

        它会自动生成数据并用这些虚拟数据填充您的数据库表

        【讨论】:

          【解决方案5】:

          我看到仍然没有被选为最佳答案。除了本帖已经提到的解决方案,我可以建议使用ApexSQL Generate – a SQL data generator tool,它能够使用各种数据源和各种数据生成器快速生成数百万行。

          它具有功能齐全的免费试用版,因此您可以下载并测试它是否可以完成您的工作。

          【讨论】:

            【解决方案6】:

            如果有人正在寻找一种无需额外软件的简单方法。

            我们只需要一个返回随机数的函数:

            -- Create the RANDBETWEEN function
            -- Usage: SELECT dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID())))
            CREATE FUNCTION dbo.RANDBETWEEN(@minval TINYINT, @maxval TINYINT, @random NUMERIC(18,10))
            RETURNS TINYINT
            AS
            BEGIN
              RETURN (SELECT CAST(((@maxval + 1) - @minval) * @random + @minval AS TINYINT))
            END
            GO
            

            然后你可以运行这样的查询:

            -- Insert 1 million records into the Person table
            INSERT INTO Person (FirstName,LastName,CityId)
            SELECT TOP 1000000
                CASE
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 0 THEN 'John'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 1 THEN 'Jack'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 2 THEN 'Bill'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 3 THEN 'Mary'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 4 THEN 'Kate'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 5 THEN 'Matt'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 6 THEN 'Rachel'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 7 THEN 'Tom'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 8 THEN 'Ann'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 9 THEN 'Andrew'
                ELSE 'Bob' END AS FirstName,
                CASE
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 0 THEN 'Smith'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 1 THEN 'Morgan'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 2 THEN 'Simpson'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 3 THEN 'Walker'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 4 THEN 'Bauer'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 5 THEN 'Taylor'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 6 THEN 'Morris'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 7 THEN 'Elliot'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 8 THEN 'White'
                    WHEN dbo.RANDBETWEEN(0,9,RAND(CHECKSUM(NEWID()))) = 9 THEN 'Davis'
                ELSE 'Brown' END AS LastName,
                dbo.RANDBETWEEN(1,15,RAND(CHECKSUM(NEWID()))) as CityId
            FROM sys.all_objects a
            CROSS JOIN sys.all_objects b
            GO
            

            结果:

            相应地调整查询以匹配您的表/列名称。

            【讨论】:

              【解决方案7】:

              我创建了一个project with java in netbeans IDE 这个项目允许你用随机数据填充你的表。它有一些问题,所以我正在努力解决它。

              【讨论】:

                【解决方案8】:

                我通常使用的非常简单的 SQL:

                create table fillTbl (msg nvarchar(255))
                insert into fillTbl select top 4285 description from sys.sysmessages where msglangid=1033 -- ~ 1 Mo
                GO 100 -- the number of Mo you want to add
                exec sp_spaceused 'fillTbl' -- space in the table
                exec sp_spaceused -- space in the database
                -- drop table fillTbl -- reset the space added
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-03-23
                  • 1970-01-01
                  • 2014-06-13
                  • 2016-07-01
                  • 1970-01-01
                  • 2021-12-27
                  • 2016-02-01
                  相关资源
                  最近更新 更多