0

我有一个表将保存待处理的数据,这些数据将更新同一服务器上的另一个表。这个挂起的表从另一个服务器存储过程中获取数据。一旦数据在此挂起的表中,存储过程将尝试基于挂起表中的 tinyint 列进行插入、更新或删除。

除非需要发生某些事情,否则此待处理表将保持为空。在过程结束时,我们从这个挂起的表中删除。

如果需要更新的同一记录在过程运行时从另一台服务器插入两次,则会出现问题。最后,这两条记录都将被清除。我试图通过在待处理表中添加增量 id 来解决这个问题,但我无法在插入中输出 id:

insert into config.table (col1, col2, col3)
output inserted.col3, pendingId into @table
select p.col1, p.col2, p.col3
from pendingTable p
 left join config.table t on p.col1 = t.col1
where t.col1 is null

我在 pendingId 上遇到错误。我计划使用@table 变量从挂起中删除,以避免删除未触及的记录(在程序运行时添加的新插入记录)。

delete p
from pendingTable p
 inner join @table t on p.pendingId = t.pendingId and p.col3 = t.col3
4

1 回答 1

2

您需要缓存待处理的记录并在之后删除它们。

begin tran

select p.pendingid
into #pendingcache
from pendingTable p
 left join config.table t on p.col1 = t.col1
where t.col1 is null

insert into config.table (col1, col2, col3)
output inserted.col3, pendingId into @table
select ...
from #pendingcache

delete p
from pendingTable p
inner join #pendingcache c on c.pendingId = p.pendingId

commit


下面的原始答案

inserted以前失踪了pendingid,即inserted.pendingid。这是为了消除和之间的inserted歧义deleted。以下作品。

哦,你也错过了整个 SELECT 语句,或者我假设它实际上是由于为问题创建了“模拟”表?

create table configtable (col1 int, col2 int, col3 int, pendingid int identity)

create table pendingtable (col1 int, col2 int, col3 int, pendingid int identity)
insert pendingtable values (1,2,3)

declare @table table (col3 int, pendingid int)

insert into configtable (col1, col2, col3)
output inserted.col3, inserted.pendingId into @table
select col1, col2, col3
from pendingTable p
于 2012-10-11T22:39:43.440 回答