在SQL Server 2008中将合并拆分为批处理
我正在试图找到批量执行SQL Server在SQL Server 2008中将合并拆分为批处理,sql,sql-server,sql-server-2008,merge,Sql,Sql Server,Sql Server 2008,Merge,我正在试图找到批量执行SQL Server合并的最佳方法。 testablename是一个带有id列(以及所有其他列)的临时表 我在考虑使用id作为计数器的某种while循环 merge语句的真正问题是,在处理200K+条记录时,它会将整个表锁定更长的时间。我希望每100行循环一次,这样就可以释放锁,让其他应用程序访问表。此表有数百万行,并且每次更新数据时都会触发审核。这导致160K记录在下面的合并中需要大约20到30分钟 下面的合并代码是该代码的一个示例。大概有25列被更新/插入 我愿意找到除
合并的最佳方法。
testablename
是一个带有id列(以及所有其他列)的临时表
我在考虑使用id作为计数器的某种while循环
merge语句的真正问题是,在处理200K+条记录时,它会将整个表锁定更长的时间。我希望每100行循环一次,这样就可以释放锁,让其他应用程序访问表。此表有数百万行,并且每次更新数据时都会触发审核。这导致160K记录在下面的合并中需要大约20到30分钟
下面的合并代码是该代码的一个示例。大概有25列被更新/插入
我愿意找到除合并之外的其他方法来插入数据。我只是无法更改审计系统或表中记录的数量
merge Employee as Target
using TEMPTABLENAME as Source on (Target.ClientId = Source.ClientId and
Target.EmployeeReferenceId = Source.EmployeeReferenceId)
when matched then
update
set
Target.FirstName = Source.FirstName,
Target.MiddleName = Source.MiddleName,
Target.LastName = Source.LastName,
Target.BirthDate = Source.BirthDate
when not matched then
INSERT ([FirstName], [MiddleName], [LastName], [BirthDate])
VALUES (Source.FirstName, Source.MiddleName, Source.LastName, Source.BirthDate)
OUTPUT $action INTO @SummaryOfChanges;
SELECT Change, COUNT(*) AS CountPerChange
FROM @SummaryOfChanges
GROUP BY Change;
但是,您不担心事务完整性吗?您是否尝试过以下任何一种方法:在某种程度上是的,但是正在更新的记录“不应该”被另一个应用程序更新。我们可以说正在更新的记录组属于一个客户端。虽然其他客户机下的记录可能会在同一时间得到更新,但此客户机记录不应真正从其他应用程序得到更新。我真的想保持合并,并在100的批处理它。这样,更新的100条记录仍然是事务性的,并且之前或之后的任何更新都是可以接受的。但您不担心事务完整性吗?您是否尝试过以下任何一种方法:是的,但是正在更新的记录“不应该”被其他应用程序更新。我们可以说正在更新的记录组属于一个客户端。虽然其他客户机下的记录可能会在同一时间得到更新,但此客户机记录不应真正从其他应用程序得到更新。我真的想保持合并,并在100的批处理它。这样,得到更新的100条记录仍然是事务性的,并且之前或之后的任何更新都是可以接受的。