Id, Name, Address
1 A #202
1 A #203
1 A #204
2 A #202
目标表
合并
Id, Name, Address
1 A #202
2 A #202
后,我用这SQL
create table #S (ID int, Name varchar(25) NULL, Address varchar(25) NULL)
create table #T (ID int, Name varchar(25) NULL, Address varchar(25) NULL)
INSERT #S values(1, 'A', '#202')
INSERT #S values(1, 'A', '#203')
INSERT #S values(1, 'A', '#203')
INSERT #S values(1, 'A', '#204')
INSERT #T values(1, 'A', NULL)
MERGE #T USING
(
Select id, name, address
from #S
) AS S(id,name,address)
on #T.id=S.id and #T.Name=S.Name
when not matched THEN
INSERT values(S.id,S.Name, S.Address)
when matched then
update set Address = S.Address;
GO
Select * from #T
GO
Select * from #S
GO
这将导致一个错误
消息8672,级别16,状态1,行18
MERGE语句试图更新或删除同一行多次。当目标行匹配多个源行时会发生这种情况。 MERGE语句不能多次更新/删除目标表的同一行。细化ON子句以确保目标行至多与一个源行匹配,或使用GROUP BY子句对源行进行分组。
我想从三个匹配值中的任何一个更新A中带有地址值的行。这个怎么做?
我想与地址值来更新行中的从三个匹配值 – 2009-09-16 16:32:32
中的任何一个,但你如何确定它们使用哪一个? – HLGEM 2009-09-16 16:55:48
我使用的Row_Number既是源代码也是目标(查看)。然后匹配条件包括附加条件,如果rownumbers是相同的(target.address isnull或(t.address = s.address)) – 2009-09-16 17:50:34