目前开发团队已完成其应用程序,并且作为测试人员需要在20个表中插入1000000条记录,以进行性能测试。
我经历了表格,实际上所有表格之间存在关系。
要在表格中插入那么多虚拟数据,我需要在很短的时间内完全理解应用程序,以便此时我也不会有虚拟数据。
在SQL server
中是否有任何方法可以插入这么多数据插入的可能性。
请分享方法。
是否有任何脚本或任何其他解决方案以简单的方式执行此任务。
如果这是一个常见问题,我很抱歉,我是第一次在SQL实时场景中工作。但我对SQL有所了解。
答案 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]