2013-12-21 5 views
1

Я написал следующий триггер:Update Trigger, влияющие слишком много строк

begin 

update NFL.TeamStatistics 

set Passing_Yards = (select sum(Quarterbacks.Yards) 
        from NFL.Quarterbacks 
        where Quarterbacks.Team = inserted.Team) 

from NFL.Quarterbacks 
      inner join inserted on Quarterbacks.Team = inserted.Team; 

Всякий раз, когда кто-то обновляет проходящие ярдов в таблице о квотербэков, он должен автоматически установить NFL.TeamStatistics.Passing_Yards на сумму мимолетных ярдов каждой команды.

Я использовал следующую инструкцию, чтобы проверить:

update NFL.Quarterbacks 

set Quarterbacks.Yards = 4000 

where Team = 'PIT'; 

Однако в таблице NFL.TeamStatistics она установила passingyards для всех команд 4000, а не только для PIT. В чем дело?

+1

нет where для оператора обновления, ему будет обновлена ​​таблица NFL.TeamStatistics – bjhaid

+0

FYI, это триггер после обновления. – user3109653

+0

Я считаю, что я ставлю предложение where после суммы (Quarterbacks.Yards). Должен ли я разместить его в другом месте? – user3109653

ответ

1

Вам нужно добавить где положение и столбец в NFL.TeamStatistics, которые вы хотите сравнить

например: сравнивали

begin 

update NFL.TeamStatistics 

set Passing_Yards = (select sum(Quarterbacks.Yards) 
        from NFL.Quarterbacks 
        where Quarterbacks.Team = inserted.Team) 

from NFL.Quarterbacks 
      inner join inserted on Quarterbacks.Team = inserted.Team 
where Team = Quarterbacks.Team; 

Предполагая, что вы не Quaterbacks.Team

0

Вы должны использовать оператор where в своей инструкции обновления, чтобы фильтровать данные, которые вы собираетесь обновлять.

Смежные вопросы