使用合并语句级联副本导致锁定问题


SQL Server 2012 (SP1) with 64GB ram using 50GB for max server memory
sp_configure 'locks' = 0
trace flags 1211 & 1224 are off
using READ_COMMITTED
SET LOCK_TIMEOUT 0

使用MERGE时出现此错误:

SQL Server 数据库引擎的实例此时无法获取 LOCK 资源。当活动用户较少时重新运行语句。要求数据库管理员检查此实例的锁和内存配置,或检查长时间运行的事务。

太多的开发人员在合并方面遇到了持续的问题,那么我们还能如何有效地为父/子表执行行和相关行的级联复制。 例如,表A有许多表B行,表C有许多表D行等...

MERGE在创建新的标识值时很有用,同时在同一行上保留旧标识以查找下一个表插入的数据,是否有替代方案?

使用单表插入OUTPUT命令,我们无法同时获取旧 ID 和新 ID

INSERT INTO tableA
OUTPUT  inserted.[ID],inserted.[col1],inserted.[col2],inserted.col3,
INTO #tmptable

在 SQL Server 中可用于执行此操作的最佳选项是什么?

我最近不得不重新访问这段代码来进行更改,我所做的是:code (1( 创建表 #tmptable ([oldID] [bigint] ,[newID] [bigint](,(2( 将 oldID 永久列添加到主表中,这与该行的 PK 完全相同 (3( 插入 [dbo]。主表] 输出已插入。[旧ID],插入。[新身份证]走进 #tmptable选择旧 ID 、列 1、列 2 ... code - 这是为新 ID 和旧 ID 插入数据以在同一行上出现的唯一方法,我很惊讶 msft 在 SQL 中还没有这个命令,因为合并非常慢!

最新更新