需要帮助了解使用Sql Server 2008的MERGE关键字

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>进场比赛(繁荣时期)?

如果是这样,有人可以帮我建议我应该如何使用它?

Mik*_*son 9

您可以像这样使用合并,但我猜您新团队的源表必须包含整个新团队,包括那些尚未修改的团队.这是一个简化的示例.

本赛季从这支球队开始

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语句合并NewTeamTeam会是这样的.

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)