【发布时间】:2015-03-27 13:07:47
【问题描述】:
有谁知道每个事务 SQL Server 可以同时处理多少个INSERT 命令?基本上,我正在用一堆INSERT(大约8000 个INSERT 命令,每个大约有600 个字符)构建一个长字符串,然后我将使用函数SQLexcute(sql_text) 执行它:
for(obj in objects) {
sql_text += "INSERT(prop1, prop2, prop3, prop4, prop5) VALUES(" + obj.prop1 + "," + obj.prop2 + "," + obj.prop3 + "," + obj.prop4 + "," + obj.prop5+");"
}
SQLexcute(sql_text)
【问题讨论】:
-
我假设你在后端使用 c# 来生成查询文本,如果我是正确的,你应该真正使用 stringbuilder 而不是像这样连接字符串,因为每个当您向字符串添加内容时,它会创建字符串的新实例(c# 中的字符串是不可变的)。就 SQL 查询而言,一次插入 8000 条记录应该没什么大不了的。我还假设您在生成 SQL 查询之前正在清理对象属性的数据,以禁止 SQL 注入?
-
要记住的一件事是,如果插入超过 5000 个,SQL Server 会将其锁升级到表级独占锁一次行(在单个事务中) - 这样表将被完全锁定,直到
INSERT事务提交 - 在平均时间 -
请please使用参数而不是将字符串组合在一起(如果这是 C#,请在
SqlCommand上使用SqlParameters):sommarskog.se/dynamic_sql.html#SQL_injection您在查询文本中缺少表名 -
我不是在 C# 上构建的。我正在另一个程序上构建字符串。编程语言是 Mosel
-
呃,太臭了。无论如何,它应该能够处理参数化查询。即使传入大量值并将其拆分,在性能方面似乎也比 8,000 个单独的插入要好。
标签: sql-server sql-insert mosel