触发器中的SQL连接表
我使用的是SQL server,我正在尝试创建一个触发器,每当表OrderHeader中的ShipDate从NULL更新为实际日期时,该触发器将从表book中减量QtyOnHand 1 从下表中可以看出,OrderHeader和Book之间没有直接的关系,我必须从OrderHeader中遍历OrderDetail表,以获得书籍的ISBN,然后从具有相应ISBN的Book表中手动递减QT 我尝试在触发器中连接所有3个表来比较OrderNo、ISBN和QtyOnHand以进行比较,但我不确定这是否是解决此问题的正确方法 如有任何建议,将不胜感激。多谢各位 订单头触发器中的SQL连接表,sql,sql-server,Sql,Sql Server,我使用的是SQL server,我正在尝试创建一个触发器,每当表OrderHeader中的ShipDate从NULL更新为实际日期时,该触发器将从表book中减量QtyOnHand 1 从下表中可以看出,OrderHeader和Book之间没有直接的关系,我必须从OrderHeader中遍历OrderDetail表,以获得书籍的ISBN,然后从具有相应ISBN的Book表中手动递减QT 我尝试在触发器中连接所有3个表来比较OrderNo、ISBN和QtyOnHand以进行比较,但我不确定这是否是
+-----------+---------+------+-----+
| Name | Type | Null | Key |
+-----------+---------+------+-----+
| OrderNo | int | NO | PRI |
| MemberID | char(10)| NO | |
| OrderDate | date | NO | |
| Address | char(30)| NO | |
| ShipDate | date | YES | |
+-----------+---------+------+-----+
订单详情
+-----------+---------+------+-----+
| Name | Type | Null | Key |
+-----------+---------+------+-----+
| OrderNo | int | NO | PRI |
| OrderLine | int | NO | PRI |
| ISBN | char(10)| NO | |
| Quantity | int | NO | |
| Price | decimal | NO | |
+-----------+---------+------+-----+
书
我会这样做,没有运行查询,可能有语法错误
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;
当然不是正确的方式。当应用程序将订单标记为已发货时,应该减少库存。
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;