【问题标题】:Maximum number of inserts per transaction on SQL ServerSQL Server 上每个事务的最大插入数
【发布时间】: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


【解决方案1】:

肖恩是对的。

不要执行 mosel 中的代码。您必须在 T-SQL 中创建查询并在那里传递参数。

这里有表值参数的链接:

Tabled valued param

【讨论】:

猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2011-05-22
  • 2010-09-07
  • 2020-09-26
  • 1970-01-01
相关资源
最近更新 更多