2013-10-15 139 views
2

我需要一個觸發繼承人的問題SQL服務器觸發

假設主表包含一個名爲TotalRental列代表由業主租用的所有單總租賃費幫助。編寫代碼下面的文本

a.When在MarinaSlip表中插入一行顯示的風格以下觸發器,租賃費增加總租金爲適當的所有者

我的繼承人SQL

CREATE TRIGGER add_rentalfee 
ON MarinaSlip 
AFTER INSERT 
AS 
BEGIN 

SET NOCOUNT ON; 

UPDATE Owner 
SET TotalRental = TotalRental + RentalFee 
FROM Owner INNER JOIN MarinaSlip ON Owner.OwnerNum = MarinaSlip.OwnerNum 
WHERE owner.OwnerNum = MarinaSlip.OwnerNum 

END 
GO 

,你可以告訴即時通訊新到SQL中的問題是,當我插入一行它改變表不只是一個,我想 請解釋什麼是錯,我該如何解決即時通訊使用微軟的所有行sql server 2012 謝謝

回答

1

你需要加入到插入的表只選擇已插入的行:

CREATE TRIGGER add_rentalfee 
ON MarinaSlip 
AFTER INSERT 
AS 
BEGIN 

SET NOCOUNT ON; 

UPDATE Owner 
SET TotalRental = TotalRental + RentalFee 
FROM Owner INNER JOIN MarinaSlip ON Owner.OwnerNum = MarinaSlip.OwnerNum 
INNER JOIN INSERTED ON owner.OwnerNum = INSERTED.OwnerNum 

END 
GO 

如果您檢查您的SELECT說法有點接近,在INNER JOIN鏈接兩個表在一起,但你WHERE子句不做任何過濾。如果你是服務器,你會如何閱讀你的陳述?更新所有者號碼與碼頭單中的所有者號碼相匹配的所有行。

TechNet: Use the inserted and deleted Tables

+0

謝謝你不很多想知道過了多久我工作的這個 – user2881301

0

您應該使用INSERTED表,並確保您的查詢可以處理許多行插入一個時間:

UPDATE Owner 
SET TotalRental = TotalRental + insT.SumRentalFee 
FROM Owner 
INNER JOIN 
(select OwnerNum, sum(RentalFee) as SumRentalFee 
     from INSERTED 
     group by OwnerNum) as insT 
ON Owner.OwnerNum = insT.OwnerNum