【发布时间】:2019-01-30 21:42:30
【问题描述】:
我们执行 SQL Server 存储过程mySP 插入数据库(假设它会调用存储过程大约 300,000 次)。
ALTER PROCEDURE [dbo].[mySP]
@ThePath VARCHAR(255),
@TheID INT
AS
INSERT INTO myTbl (TheTime, ThePath, TheID)
VALUES (GETDATE(), @ThePath, @TheID)
这是执行存储过程mySP的代码:
using (SqlConnection con = new SqlConnection(connectionString))
{
:
foreach (.....) //about 300,000 times
{
SqlCommand MyCmd = new SqlCommand("mySP", con);
MyCmd.CommandType = CommandType.StoredProcedure;
MyCmd.Parameters.Add(new SqlParameter("ThePath", sMyPath));
MyCmd.Parameters.Add(new SqlParameter("TheID", sMyID));
iRow = MyCmd.ExecuteNonQuery();
MyCmd.Dispose();
MyCmd = null;
}
}
如何在一批说 5000 的情况下执行此操作,然后提交事务?
谢谢
【问题讨论】:
-
你为什么不通过 SP 做呢?用你想要的批号在 SP 内循环。
-
您好,我需要在应用程序中执行循环以获取需要插入数据库的信息。
-
批处理意味着编写多语句SQL。不需要循环。批处理多个插入也不会使它们更快,它节省了网络往返。另一方面,批量插入确实通过使用最少的日志记录来提高性能。您可以使用
bcp命令、theBULK INSERT` 语句或 SqlBulkCopy 类来批量插入数据 -
SqlBulkCopy 可以接受 DataTabel 或 DataReader 作为源,这意味着您可以将其他数据库查询的结果提供给它
标签: .net sql-server stored-procedures c#-4.0 sqlcommand