2014-10-31 49 views
0

我正在使用SQL服務器,而我正在嘗試做的是創建一個觸發器,每當ShipDate(從表「OrderHeader」)將QtyOnHand(從表「book」)減1從NULL更新爲實際日期。SQL - 連接觸發器中的表

正如你從下面的表格中看到的,OrderHeader和Book不是直接相關的,我必須通過OrderHeader的OrderDetail表來獲取書的ISBN,然後從Book表中減去QtyOnHand, ISBN。

我試圖加入觸發器中的所有3個表來比較OrderNo,ISBN和QtyOnHand進行比較,但我不確定這是否是解決此問題的正確方法。

任何建議,將不勝感激。謝謝

OrderHeader

+-----------+---------+------+-----+ 
| Name  | Type | Null | Key | 
+-----------+---------+------+-----+ 
| OrderNo | int  | NO | PRI | 
| MemberID | char(10)| NO |  |  
| OrderDate | date | NO |  | 
| Address | char(30)| NO |  | 
| ShipDate | date | YES |  | 
+-----------+---------+------+-----+ 

的OrderDetail

+-----------+---------+------+-----+ 
| Name  | Type | Null | Key | 
+-----------+---------+------+-----+ 
| OrderNo | int  | NO | PRI | 
| OrderLine | int  | NO | PRI |  
| ISBN  | char(10)| NO |  | 
| Quantity | int  | NO |  | 
| Price  | decimal | NO |  | 
+-----------+---------+------+-----+ 

+-----------+---------+------+-----+ 
| Name  | Type | Null | Key | 
+-----------+---------+------+-----+ 
| ISBN  | char(10)| NO | PRI | 
| Author | char(50)| NO |  |  
| Title  | char(80)| NO |  | 
| QtyOnHand | int  | NO |  | 
| Price  | decimal | YES |  | 
+-----------+---------+------+-----+ 
+0

當然不是正確的方法。當您的應用程序將訂單標記爲已發貨時,應該減少庫存。 – 2014-10-31 20:33:48

回答

0

我會做這樣的事情,還沒有運行該查詢可能有一些語法錯誤,

MERGE Book As Target 
USING (Select OH.ISBN FROM OrderHeader OH 
Inner join OrderDetail OD 
ON OH.OrderNo = OD.OrderNo 
Where OD.ShipDate IS NOT NULL) AS Source 
ON Source.ISBN = Target.ISBN 
WHEN MATCHED THEN 
    UPDATE 
    SET Target.QtyOnHand = Target.QtyOnHand + 1;