2016-03-17 28 views
0

参数I具有2个表,通过CustomerId具有关系:更新一个表的一列时,一个列被更新其它表使用触发器

发票

Invoice | RouteCode | CustomerId 
1001 | 1   | 90 
1002 | 2   | 70 
1003 | 3   | 80 

顾客

CustomerId | CustomerName | RouteCode 
90   | AAA   | 1 
70   | BBB   | 2 
80   | CCC   | 3 

我想创建一个触发器onc e发票中的RouteCode已更改,特定客户的客户中的路由代码将被更改。

例子:

发票:

Invoice | RouteCode | CustomerId 
1001 | 2   | 90   (the RouteCode here has changed) 
1002 | 2   | 70 
1003 | 3   | 80 

客户:

CustomerId | CustomerName | RouteCode 
90   | AAA   | 2  (the RouteCode here must change too) 
70   | BBB   | 2 
80   | CCC   | 3 

我有这样的代码:

create trigger UpdateRouteCode 
before update on Invoice 
for each row 
begin 
    if :new.RouteCode != :old.RouteCode 
    then 
     update Customer c 
     set c.RouteCode = :new.RouteCode 
     where c.CustomerId = :new.CustomerId 
end 

我不知道这是否是正确的,因为在新的查询窗口中它说:

消息102,级别15,状态1,过程UpdateRouteCode,行 '前' 2
附近有语法错误。

+3

你触发语法不属于'SQL SERVER' –

+0

我刚刚才从这里的解决方案之一。你能告诉我如何改变它吗? – Ibanez1408

+0

如果一个'Customer'在'Invoice'表中多次出现并且只有一个客户'Routecode'在这种情况下发生了变化,我们应该怎么做 –

回答

3
create trigger UpdateRouteCode 
on Invoices 
for update 
as 
begin 
    update c 
    set RouteCode = i.RouteCode 
    from inserted i 
      inner join Customers c on i.CustomerId = c.CustomerId 
    where i.RouteCode <> c.RouteCode 
end 
+0

谢谢!完全按照应有的方式工作。 – Ibanez1408

相关问题