自动更新表中所有记录的方法

时间:2013-11-09 01:15:09

标签: sql sql-server

基本上我一直在建立一个基于2013年大学橄榄球赛季的数据库。我希望能够通过运行一个SQL脚本来更新所有团队记录。

SET @thisTeam='Oregon';
UPDATE team
SET wins=(
        SELECT COUNT(winner) FROM game WHERE winner=@thisTeam),
    losses=(
        SELECT COUNT(loser) FROM game WHERE loser=@thisTeam)
WHERE teamName=@thisTeam;

到目前为止,我一直在手动更新我的@thisTeam变量来更新游戏。我尝试使用触发器,但据我所知,我无法在“游戏”表中使用触发器来执行“团队”表中的更新。这段代码工作得很好,我只想要一种更自动化的方式来做到这一点。我是SQL的新手,我通常会运行一个FOR EACH循环,但我听说用SQL做这个是个坏主意。

我正在运行Microsoft SQL Server

1 个答案:

答案 0 :(得分:2)

您可以从触发器更新第二个表。您也可以一次更新表格:

with x as (
    select
        t.teamName,
        sum(case winner when t.teamname then 1 else 0 end) wins,
        sum(case loser when t.teamname then 1 else 0 end) losses
    from
        team t
            cross join
        game g
    group by
        t.teamName 
)
Update
    t
Set
    wins = x.wins,
    losses = x.losses
From
    team t
        inner join 
    x
        on t.teamName = x.teamName

编辑 - 略微简化

<强> Example SQLFiddle