关于sql中的instead of update触发器的问题

来源:百度知道 编辑:UC知道 时间:2024/05/20 10:33:11
现在有两张相同的表A与B(通过select into语句复制的一张表)
要在A表上面建立一个instead of update触发器,要求当A表中的任一字段被修改后,B表中同样完成这个修改

自己写了一个字段的,如下:
create trigger tr_insteadUpdate on A
instead of update
AS
declare @customerID nchar(5),
@OrderID int
select @customerID = customerID from inserted
select @OrderID = OrderID from inserted

update B
set customerID=@customerID
where OrderID = @OrderID

update A
set customerID=@customerID
where OrderID = @OrderID
GO

感觉上应该有比较简单的方法吧

两个赋值语句可以写到一起的,
select @customerID = customerID,@OrderID = OrderID from inserted

即便是这样,你这么写是不对的,
如果你的update 更新的记录大于一行 那么你的这个触发器只能修改表中最后一条记录
正确的写法应该是这样
update b set customerID = i.customerID from b inner join inserted i on b.orderid = i.orderid

update a set customerID = i.customerID from a inner join inserted i on a.orderid = i.orderid

为什么要用instead of 触发器呢?直接用update触发器,更新操作可以对触发器所在的表进行更新,你只要在触发器里对另外一个表进行更新就可以了。
create trigger tr_insteadUpdate on A
for update
AS

update A
set customerID=i.customerID
from A,inserted i
where A.OrderID = i.OrderID
go