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资源。当活跃用户较少时,重新运行您的语句。请数据库管理员检查此实例的锁定和内存配置,或检查长时间运行的事务。
太多开发人员遇到了合并的持续问题,因此我们如何才能有效地为父/子表执行行和相关行的级联复制。例如。 tableA有很多tableB行,tableC有很多tableD行等......
MERGE
在创建新标识值时非常有用,而在同一行上保持旧标识可以回顾下一个表插入的数据,还有其他选择吗?
使用单表插入OUTPUT
命令,我们无法同时获取旧ID和新ID
INSERT INTO tableA
OUTPUT inserted.[ID],inserted.[col1],inserted.[col2],inserted.col3,
INTO #tmptable
在SQL Server中可以使用哪些最佳选项?
答案 0 :(得分:0)
我最近不得不重新访问此代码以进行更改,我所做的是:code
(1)创建表#tmptable([oldID] [bigint],[newID] [bigint]),(2 )将oldID永久列添加到主表,这与该行的PK完全相同(3)INSERT INTO [dbo]。[主表]插入OUTPUT。[oldID],插入。[newID] INTO #tmptable
选择oldID,column1,column2 ... code
- 这是为新ID和旧ID插入数据的唯一方法,我感到很惊讶msft并没有这样做在sql中有这个命令,因为合并非常慢!