相关疑难解决方法(0)

使用scope_identity()用法执行嵌套批量插入的最快方法?

在我们的一个(C#)应用程序中,我们正在插入/更新一个大图(100个插入和更新).这包含在一个事务中,因为我需要在发生错误时回滚整个事情.我们正在使用Dapper来执行SQL语句.

不幸的是,整个操作目前需要2至8秒.这是2到8秒,我们数据库中的核心表被锁定,导致其他应用程序挂起或遭受锁定.

我确定其中一个操作,插入到包含超过1.2亿条记录的表中,大部分时间都在占用,但我不确定如何优化它.

粗略地说,该表格设置如下:

table A (
  id int primary_key,
  name nvarchar
)

table B (
    id int primary_key,
    a_id int foreign_key, # has an index
    name nvarchar
)
Run Code Online (Sandbox Code Playgroud)

在插入数据时A我还需要插入相应的数据B.因此,我scope_identity()用来获取记录的id并在插入记录时使用它B.

伪观看起来如下:

# open transaction
# perform other table inserts
#
# this is one of the slowest operations
for item in list_a
    id_a = exec "insert into A (name) values (" + item.name + "); select scope_identity() as int"

    for …
Run Code Online (Sandbox Code Playgroud)

.net sql sql-server dapper

4
推荐指数
1
解决办法
1783
查看次数

标签 统计

.net ×1

dapper ×1

sql ×1

sql-server ×1