MERGE语句中的TSQL OUTPUT子句引发消息596“由于会话处于终止状态而无法继续执行”

时间:2018-11-27 15:03:16

标签: tsql sql-server-2012

我编写了T-SQL MERGE查询,以将分段数据合并到数据仓库中(您可以在底部找到它)。

如果我取消注释OUTPUT语句,则会出现标题中提到的错误。 但是,如果我不包括它,那么一切都会很好,并且MERGE成功。

我知道MERGE子句存在一些问题,但是与合并类型有关的问题更多。

我检查了以下答案:[https://dba.stackexchange.com/questions/140880/why-does-this-merge-statement-cause-the-session-to-be-killed],但是在我的执行计划中,我找不到确切的索引插入,然后是索引合并。

相反,我看到的是the following execution plan

代码是在附加到SQL Server 2012(SP4)实例的数据库上开发的

我非常感谢对此问题进行了很好的解释,最好是参考执行计划中的步骤。

谢谢。

declare @changes table (chgType varchar(50),Id varchar(18))
begin try
set xact_abort on
begin tran
;with TargetUserLogHsh as (select 
hsh =hashbytes('md5',concat(coalesce([AccountName],'')
      ,coalesce([TaxNumber],'')))
      ,LastLoginCast =  coalesce(CONVERT(datetime,LastLogin,103),getdate())
      ,* from 
      dw.table1)
,SourceUserLogHsh as (select 
hsh =hashbytes('md5',concat(coalesce([AccountName],'')
      ,coalesce([TaxNumber],'')))
      ,LastLoginCast =  coalesce(CONVERT(datetime,LastLogin,103),getdate())
      ,* from 
      sta.table1)

merge TargetUserLogHsh target
using SourceUserLogHsh source
on target.ContactId = source.ContactId and target.Lastlogincast >= source.LastLoginCast
when not matched then  insert (
 [AccountName]
,[TaxNumber]
,[LastLogin]
)
values (
 source.[AccountName]
,source.[TaxNumber]
,source.[LastLogin]
)
when matched and target.lastlogincast = source.lastlogincast
and target.hsh != source.hsh then
update 
set 
 [AccountName] = source.[AccountName]
,[TaxNumber] = source.[TaxNumber]
,[LastLogin] = source.[LastLogin]
output $action,inserted.contactid into @changes
;

commit tran

end try


begin catch

if @@TRANCOUNT > 0 rollback tran

select ERROR_MESSAGE()

end catch

0 个答案:

没有答案