這並不難,特別是如果你打破了步驟。 檢查了這一點:
if object_id('tempdb..#myData') is not null
drop table #myData;
create table #myData (industryid int, productId int, externalId int);
insert into #myData (industryId, productId, externalId)
values (144,3332,13);
insert into #myData (industryId, productId, externalId)
values (147,3423,13);
insert into #myData (industryId, productId, externalId)
values (148,3532,13);
insert into #myData (industryId, productId, externalId)
values (2637,63199,32);
insert into #myData (industryId, productId, externalId)
values (121,2789,32);
--select * from #myData;
-------------------------------------------------
if object_id('tempdb..#IdsToKeep') is not null
drop table #IdsToKeep;
if object_id('tempdb..#badRows') is not null
drop table #badRows;
create table #IdsToKeep (externalId int, productId int);
create table #badRows (industryId int, productId int, externalId int);
insert into #IdsToKeep
select
externalId, min(productId)
from
#myData
group by
externalId;
--- Capture rows that will be changed ---
insert into #badRows
select
md.industryId, md.productId, md.externalId
from
#myData md
left join #IdsToKeep itk on
md.externalId = itk.externalId
and
md.productId = itk.productId
where
itk.productId IS NULL
;
--- Make the update to the main table ---
update
#myData
set
productId = itk.productId
from
#myData
inner join #IdsToKeep itk on #myData.externalId = itk.externalId
;
----------
select * from #mydata;
select * from #badRows;
謝謝,這似乎做的第一部分,但有關刪除重寫的ProductId的另一個表是什麼?我需要記錄所有被覆蓋的ProductId(或者在另一個表上直接刪除) – parliament
另外,要麼我不理解查詢,或者實際上並沒有更新第一張表? – parliament
好吧,我得到更新工作liek所以';與cte(...)UPDATE t SET t.ProductId = c.ProductId from cte c right outer join @table t \t on c.externalid = t.ExternalId ' 但是就刪除其他記錄而言,回答仍然不完整 – parliament