【发布时间】:2020-12-30 19:48:14
【问题描述】:
我想在数据库中创建 900.000 个新行,并且在这些行中的每一行中,数组中的条目都应写入列 Products。
下面提到的我的解决方案有效,但需要一个多小时。怎样才能更快地做到这一点?
我非常缓慢的解决方案:
for (int i = 1; i <= 900000; i++)
{
string SQL_command = "INSERT INTO Database(Produkte) VALUES(" + ProductArray[i] + ")";
SqlConnection con = new SqlConnection(connString);
con.Open();
SqlCommand cmd = new SqlCommand(SQL_command , con);
cmd.ExecuteNonQuery();
con.Close();
}
我使用 SQL Server 和 C#
【问题讨论】:
-
stackoverflow.com/questions/5595353/… ...它谈到了存储过程,但你也可以使用
CommandType.Text。 -
除了TVPs,另一种方法是SqlBulkCopy。如果您必须进行单例插入,请使用参数化语句并在单个事务中批量处理。
-
SQL Injection alert - 你应该不将你的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables
-
您可以使用循环在
INSERT x VALUES (@p0), (@p1), ... (@p999)中构建一个带有一千个参数占位符的 sql 字符串,并在命令中放入一千个参数,然后运行一个循环,将一千个参数值设置为time 和 call 执行 900 次而不是 900000 次。一旦你完成了代码,看看一次做 5000、10000 是否有帮助。我不确定我是否会选择 Dan 的“一次完成所有 900000”,但他是一个非常聪明的人,所以它可以很好地工作!跨度>
标签: c# sql sql-server