Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server 2008中将合并拆分为批处理_Sql_Sql Server_Sql Server 2008_Merge - Fatal编程技术网

在SQL Server 2008中将合并拆分为批处理

在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列被更新/插入 我愿意找到除

我正在试图找到批量执行SQL Server
合并的最佳方法。
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条记录仍然是事务性的,并且之前或之后的任何更新都是可以接受的。