Zoy*_*ikh 18 database sql-server
我做了Wpf appliaction.我想用网格中的1000个值来测试它.我想检查一下我的网格是否会快速加载1000条数据记录.那么如何编写一个查询来在我的数据库表中插入超过1000条记录.我可以用于循环吗?
Insert into db(@names,@email,@password) Values('abc','def','mypassword');
我正在使用Sql-Server 2012和ADO.net连接!我想在数据库中执行此查询以生成1000行
编辑
如果我想插入唯一名称该怎么办?
ver*_*527 37
我创建了一个student包含三列的表id, student,age.给你看这个例子
declare @id int
select @id = 1
while @id >=1 and @id <= 1000
begin
insert into student values(@id, 'jack' + convert(varchar(5), @id), 12)
select @id = @id + 1
end
Run Code Online (Sandbox Code Playgroud)
这是关于这个例子的结果

Aar*_*and 10
如果应用程序中有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!?
);
Run Code Online (Sandbox Code Playgroud)
然后使用这个程序:
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
Run Code Online (Sandbox Code Playgroud)
然后你的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();
Run Code Online (Sandbox Code Playgroud)
如果您只想生成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;
Run Code Online (Sandbox Code Playgroud)
在这些情况下,您都不应该使用while循环或游标.恕我直言.