如何将巨大的虚拟数据插入 Sql 服务器

How to insert Huge dummy data to Sql server

目前开发组正在做应用,作为测试人员需要往20张表中插入1000000条记录,进行性能测试。

我查看了表格,实际上所有表格之间都有关系。

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

SQL server有没有办法插入这么多数据插入的可能性。

请分享方法。

  1. 目前我正计划在 excel 中创建虚拟数据,但在这里我不确定表之间的关系。
  2. 在Google中发现SQL profiler会提供执行顺序,但等待访问来分析这个。
  3. 我在 Google 中发现的另一件事是可以使用 red-gate 工具。

是否有任何脚本或任何其他解决方案可以简单地执行此任务。

如果这是一个常见问题,我很抱歉,我是第一次在 SQL 实时场景中工作。但我知道 SQL.

为什么您不在 SQL 服务器中生成这些记录。这是一个生成 table 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

在table @values 你将有一些随机的int值(列RandValue),可用于为其他列生成值。您还有获取随机外键的示例。

下面是我编写的一个简单程序,用于将数百万条虚拟记录插入 table,我知道它不是最有效的程序,但可以达到一百万条记录的目的,大约需要 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

您可以使用游标来重复数据:

例如这个简单的代码:

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]