2013-12-17 81 views
0

我在寫觸發器。每當我向我的表中插入多個值,NFL.Widereceivers,我希望它自動將這些值插入到另一個表,AFC.North。我寫了一個觸發器,它工作在一定程度上:用觸發器插入

begin 
declare 

@name varchar(30), 

@team varchar(3), 

@receptions int, 

@yards int, 

@touchdowns int 

select @name = Name from inserted 

select @team = Team from inserted 

select @receptions = Receptions from inserted 

select @yards = Yards from inserted 

select @touchdowns = Touchdowns from inserted 

if (@team = 'PIT' or @team = 'BAL' or @team = 'CIN' or @team = 'CLE') 

begin 
insert into AFC.North (Name, Team, Receptions, Yards, Touchdowns) 

values (@name, @team, @receptions, @yards, @touchdowns); 
end 
end 

但是,如果我插入多個值到NFL.Widereceivers,只有第一個行插入到AFC.North這觸發不起作用。

如何讓觸發器插入多行數據?

回答

1

你的觸發器做出了一個共同但不幸的錯誤假設,即所有觸發它們的語句都會影響到一行。與其他平臺不同,每個語句觸發一次觸發器,而不是每行。因此,您需要像設置一樣對待inserted,並因此停止將單個值分配給變量。

INSERT AFC.North(Name,Team,Receptions,Yards,Touchdowns) 
    SELECT Name,Team,Receptions,Yards,Touchdowns 
    FROM inserted WHERE Team IN ('BAL','CIN','CLE','PIT'); 

您還需要決定如何爲處於inserted對其他部門的行辦(提示:你需要每分的INSERT聲明,我懷疑)。當然,一個更好的設計會讓分部成爲一個專欄,而不是每個部門都有自己的表格。

+0

謝謝你的幫助進行優化。我會試試這個。 – user3109653

0

爲什麼你在觸發器中的變量中賦值,你可以直接在下面的表格中插入它。如果你在變量中賦值,那麼它將一次存儲一行的值。如果逐個插入記錄,它將工作正常,但不能工作在多個記錄中。

insert into AFC.North (Name, Team, Receptions, Yards, Touchdowns) 
select Name, Team, Receptions, Yards, Touchdowns  
from inserted 
where Team IN ('PIT','BAL','CIN','CLE') 

即使您的變量的代碼還可以在單​​個查詢像

select @name = Name, @team = Team, @receptions = Receptions, @yards = Yards, @touchdowns = Touchdowns from inserted 
+0

謝謝你的幫助。我對SQL仍然很陌生,而且我非常自豪能夠觸發它的工作。感謝您的幫助。我下次會這樣做。 – user3109653