如何将巨大的虚拟数据插入Sql server

时间:2015-02-12 15:44:39

标签: c# sql-server dummy-data

目前开发团队已完成其应用程序,并且作为测试人员需要在20个表中插入1000000条记录,以进行性能测试。

我经历了表格,实际上所有表格之间存在关系。

要在表格中插入那么多虚拟数据,我需要在很短的时间内完全理解应用程序,以便此时我也不会有虚拟数据。

SQL server中是否有任何方法可以插入这么多数据插入的可能性。

请分享方法。

  1. 目前我正计划在 excel 中创建虚拟数据,但在这里我不确定表之间的关系。
  2. 在Google中发现 SQL探查器将提供执行顺序,但等待访问权限进行分析。
  3. 我在谷歌找到的另一件事是可以使用 red-gate 工具。
  4. 是否有任何脚本或任何其他解决方案以简单的方式执行此任务。

    如果这是一个常见问题,我很抱歉,我是第一次在SQL实时场景中工作。但我对SQL有所了解。

3 个答案:

答案 0 :(得分:9)

为什么不在SQL Server中生成这些记录。这是一个生成1000000行表的脚本:

DECLARE @values TABLE (DataValue int, RandValue INT)

;WITH mycte AS
(
SELECT 1 DataValue
UNION all
SELECT DataValue + 1
FROM    mycte   
WHERE   DataValue + 1 <= 1000000
)
INSERT INTO @values(DataValue,RandValue)
SELECT 
        DataValue,
        convert(int, convert (varbinary(4), NEWID(), 1)) AS RandValue
FROM mycte m 
OPTION (MAXRECURSION 0)


SELECT 
        v.DataValue,
        v.RandValue,
        (SELECT TOP 1 [User_ID] FROM tblUsers ORDER BY NEWID())
FROM    @values v

在表@values中你将有一些随机的int值(列RandValue),它可以用来为其他列生成值。你也有获得随机外键的例子。

答案 1 :(得分:0)

下面是我编写的一个简单的程序,用于在表格中插入数百万个虚拟记录,我知道它不是最有效的记录,但它可以达到一百万条记录的目的,大约需要5分钟。您需要传递执行该过程时需要生成的记录数。

IF  EXISTS (SELECT 1 FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[DUMMY_INSERT]') AND type in (N'P', N'PC'))
BEGIN
    DROP PROCEDURE  DUMMY_INSERT
END
GO
CREATE PROCEDURE DUMMY_INSERT (
@noOfRecords INT
)
AS
BEGIN

DECLARE @count int
SET @count = 1;

WHILE (@count < @noOfRecords)
BEGIN
    INSERT INTO [dbo].[LogTable] ([UserId],[UserName],[Priority],[CmdName],[Message],[Success],[StartTime],[EndTime],[RemoteAddress],[TId])
     VALUES(1,'user_'+CAST(@count AS VARCHAR(256)),1,'dummy command','dummy message.',0,convert(varchar(50),dateadd(D,Round(RAND() * 1000,1),getdate()),121),convert(varchar(50),dateadd(D,Round(RAND() * 1000,1),getdate()),121),'160.200.45.1',1);

     SET @count = @count + 1;
END
END

答案 2 :(得分:0)

您可以将光标用于重复数据:

例如以下简单代码:

Declare @SYMBOL nchar(255), --sample V
         @SY_ID     int         --sample V
Declare R2 Cursor
    For SELECT  [ColumnsName]
        FROM    [TableName]
    For Read Only;
Open R2
Fetch  Next From R2 INTO @SYMBOL,@SY_ID
    While (@@FETCH_STATUS <>-1 )
        Begin
            Insert INTO [TableName] ([ColumnsName])
                Values              (@SYMBOL,@SY_ID)
            Fetch  Next From R2 INTO @SYMBOL,@SY_ID
        End
Close R2
Deallocate R2
/*wait a ... moment*/
SELECT COUNT(*)                  --check result
        FROM [TableName]