2016-01-17 59 views
4

我已經創建了三個表。如何觸發一個表來更改另一個表列的值

CREATE TABLE Clients 
(
    ClientID INT IDENTITY(1,1) PRIMARY KEY, 
    First_Name VARCHAR(50) NOT NULL, 
    Last_Name VARCHAR(50) NOT NULL, 
) 
CREATE TABLE Reservation 
(
    ReservationID INT IDENTITY(1,1) PRIMARY KEY, 
    ClientID INT FOREIGN KEY (ClientID) REFERENCES Clients(ClientID), 
    Reservation_paid VARCHAR(3) DEFAULT 'NO', 
) 
CREATE TABLE Payment 
(
    Payment_ID INT IDENTITY(1,1) PRIMARY KEY, 
    ClientID INT FOREIGN KEY (ClientID) REFERENCES Clients(ClientID), 
    ReservationID INT FOREIGN KEY (ReservationID) REFERENCES Reservation(ReservationID), 
) 

我想在每次客戶端不支付預約預約表更改列Reservation_paid爲YES的價值,我想與觸發自動執行。

示例:如果Reservation表中的ClientID自動存在Payment表中,則Reservation_paid的值將設置爲YES。 預先感謝您。

+0

你應該用你正在使用的數據庫標記你的問題。 –

回答

1
CREATE TRIGGER trgAfterInsert ON [dbo].[Payment] 
FOR INSERT 
AS 
declare @ClientID int; 
select @ClientID =i.ClientID from inserted i; 

if update(ClientID) 
    UPDATE Reservation set Reservation_paid='Yes' WHERE 
    [email protected]; 

--print

+0

謝謝你的答案先生。 –

+0

最受歡迎... –

0

插入後觸發應該做這樣的事情

UPDATE R 
SET Reservation_paid = 'Yes' 
FROM reservation R 
WHERE EXISTS (SELECT 1 
       FROM INSERTED I 
       WHERE I.clientid = R.clientid 
         AND I.reservationid = R.reservationid) 
0

寫一個觸發器,將任何insertupdate後表Reservation工作表上PaymentClientId列。然後將ClientIDClientID列的Reservation表匹配,並將相應的Reservation_paid更新爲YES。

編輯: 'AFTER INSERT觸發器解僱' 觸發會是這樣

CREATE TRIGGER `UpdateReservation_paid` AFTER INSERT OR UPDATE ON `Payment` 
FOR EACH ROW BEGIN 
AS 
begin 
update Reservation 
SET Reservation_paid='YES' 
Where NEW.ClientID = Reservation.ClientID 
     and NEW.ReservationID = Reservation.ReservationID 
end 
+0

我在NEW.ClientID和NEW.ReservationID上遇到了錯誤,它說'找不到'多部分標識'NEW.ClientID/NEW.ReservationID'。 和其他錯誤:在/之後/每/但/我認爲這些都是因爲Sql語法。 –

+0

你在哪裏工作?它是mysql還是oracle? – MASh

+0

嘗試用'inserted'替換'NEW'並移除或更新,並讓我知道結果。 – MASh

0
CREATE TRIGGER trgAfterInsert ON [dbo].[Payment] 
FOR INSERT 
AS 
declare @ClientID int; 
select @ClientID =i.ClientID from inserted i; 
insert into Reservation(ClientID,Reservation_paid)  
values(@ClientID,'Yes'); 

--PRINT 'AFTER INSERT trigger fired.' 

GO

相關問題