如何将巨大的虚拟数据插入 Sql 服务器
How to insert Huge dummy data to Sql server
目前开发组正在做应用,作为测试人员需要往20张表中插入1000000条记录,进行性能测试。
我查看了表格,实际上所有表格之间都有关系。
要将那么多虚拟数据插入表中,我需要在很短的时间内完全理解该应用程序,以便此时我还没有虚拟数据。
在SQL server
有没有办法插入这么多数据插入的可能性。
请分享方法。
- 目前我正计划在 excel 中创建虚拟数据,但在这里我不确定表之间的关系。
- 在Google中发现SQL profiler会提供执行顺序,但等待访问来分析这个。
- 我在 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]
目前开发组正在做应用,作为测试人员需要往20张表中插入1000000条记录,进行性能测试。
我查看了表格,实际上所有表格之间都有关系。
要将那么多虚拟数据插入表中,我需要在很短的时间内完全理解该应用程序,以便此时我还没有虚拟数据。
在SQL server
有没有办法插入这么多数据插入的可能性。
请分享方法。
- 目前我正计划在 excel 中创建虚拟数据,但在这里我不确定表之间的关系。
- 在Google中发现SQL profiler会提供执行顺序,但等待访问来分析这个。
- 我在 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]