Pur*_*ome 2 merge sql-server-2008
我对Sql Sever 2008 的MERGE语法有基本的了解,但对于该概念的高级使用有疑问.
想象一下,我有一个拥有30名球员的运动队.每个玩家都是一张桌子上的记录.现在,在整个赛季的一半时间里,一些球员已经离开(受伤,无论如何)一些新的血液来取代他们.
所以我希望更新数据库表以准确反映这一变化.
因此,当我使用MERGE
语法时,如果新的播放器不存在,则插入它:
WHEN NOT MATCHED THEN
INSERT blah blah blah...
VALUES (blah blah and more blah)..
Run Code Online (Sandbox Code Playgroud)
匹配时,什么也不做.(所以我不需要任何WHEN MATCHED THEN
条款).
但那些离开的球员呢?是否有WHEN NOT MATCHED BY SOURCE THEN <merge_matched>
进场比赛(繁荣时期)?
如果是这样,有人可以帮我建议我应该如何使用它?
您可以像这样使用合并,但我猜您新团队的源表必须包含整个新团队,包括那些尚未修改的团队.这是一个简化的示例.
本赛季从这支球队开始
PlayerName Position
-------------------- --------
Brett Favre QB
Joe Montana QB
John Elway QB
Run Code Online (Sandbox Code Playgroud)
在赛季中途,教练意识到拥有一支拥有三个相当古老的QB的球队并不是最佳选择.布雷特拒绝退出,所以乔必须离开.约翰开始玩RB,同时我们需要一些年轻人才能让事情顺利进行.
PlayerName Position
-------------------- --------
Brett Favre QB
John Elway RB
Jerry Rice WR
Karl Mecklenburg LB
Run Code Online (Sandbox Code Playgroud)
MERGE语句合并NewTeam
到Team
会是这样的.
merge Team as T
using NewTeam as S
on S.PlayerName = T.PlayerName
when matched then
update set Position = S.Position
when not matched by target then
insert (PlayerName, Position) values (S.PlayerName, S.Position)
when not matched by source then
delete;
Run Code Online (Sandbox Code Playgroud)