我做了Wpf appliaction。我想用网格中的1000个值来测试它。我想检查一下我的网格是否会快速加载1000条数据记录。那么如何编写一个查询来在我的数据库表中插入超过1000条记录。我可以用于循环吗。
Insert into db(@names,@email,@password) Values('abc','def','mypassword');
我正在使用Sql-Server 2012和ADO.net连接!我想在数据库中执行此查询以生成1000行
修改
如果我想插入唯一名称该怎么办?
答案 0 :(得分:35)
我创建了一个包含三列student
的{{1}}表。给你看这个例子
id, student,age
这是关于这个例子的结果
答案 1 :(得分:9)
如果您的应用程序中有DataTable,并且这是1000个名称的来源,您可以使用表值参数。
首先是表格类型:
CREATE TYPE dbo.Names AS TABLE
(
Name NVARCHAR(255),
email VARCHAR(320),
[password] VARBINARY(32) -- surely you are not storing this as a string!?
);
然后使用此程序:
CREATE PROCEDURE dbo.Names_BulkInsert
@Names dbo.Names READONLY
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.RealTable(Name, email, password)
SELECT Name, email, password
FROM @Names;
END
GO
然后您的C#代码可以说:
SqlCommand cmd = new SqlCommand("dbo.Names_BulkInsert", connection_object);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter names = cmd.Parameters.AddWithValue("@Names", DataTableName);
names.SqlDbType = SqlDbType.Structured;
cmd.ExecuteNonQuery();
如果您只想生成包含随机值的1000行:
;WITH x AS
(
SELECT TOP (1000) n = REPLACE(LEFT(name,32),'_','')
FROM sys.all_columns ORDER BY NEWID()
)
-- INSERT dbo.sometable(name, email, [password])
SELECT
name = LEFT(n,3),
email = RIGHT(n,5) + '@' + LEFT(n,2) + '.com',
[password] = CONVERT(VARBINARY(32), SUBSTRING(n, 1, 32))
FROM x;
在这两种情况下都不应该使用while循环或游标。 IMHO。强>
答案 2 :(得分:4)
您当然可以使用循环,也可以将它们插入单个语句中,例如
Insert into db
(names,email,password)
Values
('abc','def','mypassword')
,('ghi','jkl','mypassword2')
,('mno','pqr','mypassword3')
这取决于您从哪里获取数据。
如果您使用循环,将其包装在事务中将使其更快一些。
<强>更新强>
如果我想插入唯一名称该怎么办?
如果要插入唯一名称,则需要生成具有唯一名称的数据。一种方法是使用Visual Studio to generate test data。
答案 3 :(得分:4)
您可以通过从结果插入来插入多个记录:
insert into db (@names,@email,@password)
select 'abc','def','mypassword' union all
select 'abc','def','mypassword' union all
select 'abc','def','mypassword' union all
select 'abc','def','mypassword' union all
select 'abc','def','mypassword' union all
select 'abc','def','mypassword'
只需添加任意数量的记录即可。但是查询的复杂性可能存在限制,因此可能无法一次添加多达1000条记录。
答案 4 :(得分:2)
顺便说一下,为什么不通过存储过程使用XML数据插入?
这是执行此操作的链接... Inserting Bulk Data through XML-Stored Procedure
答案 5 :(得分:1)
使用@Aaron Bertrand的想法(FROM sys.all_columns
),这将创建1000条记录:
SELECT TOP (1000) LEFT(name,20) as names,
RIGHT(name,12) + '@' + LEFT(name,12) + '.com' as email,
sys.fn_sqlvarbasetostr(HASHBYTES('MD5', name)) as password
INTO db
FROM sys.all_columns
参见 SQLFIDDLE
答案 6 :(得分:0)
DECLARE @X INT = 1
WHILE @X <=1000
BEGIN
INSERT INTO dbo.YourTable (ID, Age)
VALUES(@X,LEFT(RAND()*100,2)
SET @X+=1
END;
enter code here
DECLARE @X INT = 1
WHILE @X <=1000
BEGIN
INSERT INTO dbo.YourTable (ID, Age)
VALUES(@X,LEFT(RAND()*100,2)
SET @X+=1
END;
答案 7 :(得分:0)
最简单的方法。
仅在10秒内停止执行。
Create table SQL_test ( ID INT IDENTITY(1,1), UserName varchar(100))
while 1=1
insert into SQL_test values ('TEST')
答案 8 :(得分:0)
您也可以使用以下CTE。您可以根据需要修改它。但这会将相同的值添加到学生CTE中。
这将添加1000条记录,但您可以将其更改为10000或最多32767
;WITH thetable(rowid,sname,semail,spassword) AS
(
SELECT 1 , 'name' , 'email' , 'password'
UNION ALL
SELECT rowid+1 ,'name' , 'email' , 'password'
FROM thetable WHERE rowid < 1000
)
SELECT rowid,sname,semail,spassword
FROM thetable ORDER BY rowid
OPTION (MAXRECURSION 1000);