这个Update trigger应该怎么写?

cBeginner 2002-10-03 12:53:21
Table Delivery
===============
DeliveryID SupplierID
1 2
2 1
3 3

Table DeliveryItem
==================
DeliveryItemID DeliveryID OrderItemID
1 1 1
2 1 2
3 2 3
4 3 4

当用户在表DeliveryItem里插入一条新纪录之后,如果在表Delivery里对应的SupplierID存在的话,那么表Delivery里的SupplierID就不能被修改.

这个trigger应该怎么写?
...全文
35 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
奇遇 2002-10-04
  • 打赏
  • 举报
回复
再建一个过程
CREATE TRIGGER tr_up ON [dbo].[delivery]
FOR update
AS
if update(SupplierID)
if exists(select a.gno from deleted a,DeliveryItemb where a.DeliveryID=b.DeliveryID)
and not exists(select a.gno from inserted a,DeliveryItemb where a.DeliveryID=b.DeliveryID)
rollback;
以上都是对单行跟新、删除的情况
如果多行的问题就复杂了 :)
cBeginner 2002-10-03
  • 打赏
  • 举报
回复
我觉得应该用Update,不是Delete,不知道对不对?
cBeginner 2002-10-03
  • 打赏
  • 举报
回复
顺便问一下,怎么测试写好的trigger?
cBeginner 2002-10-03
  • 打赏
  • 举报
回复
谢谢
奇遇 2002-10-03
  • 打赏
  • 举报
回复
可以的,我是拿我的两个表试了一下,gno是我表里的字段 :)忘改了
cBeginner 2002-10-03
  • 打赏
  • 举报
回复
我改成这样写可不可以?

CREATE TRIGGER tr_del ON [dbo].[delivery]
FOR DELETE
AS
if exists(select SupplierID from deleted,DeliveryItem where Delivery.DeliveryID=DeliveryItem.DeliveryID)
begin
raiserror("can't change SupplierID",16,1)
rollback transaction
end


cBeginner 2002-10-03
  • 打赏
  • 举报
回复
gno是什么?
奇遇 2002-10-03
  • 打赏
  • 举报
回复
CREATE TRIGGER tr_del ON [dbo].[delivery]
FOR DELETE
AS
if exists(select a.gno from deleted a,DeliveryItemb where a.DeliveryID=b.DeliveryID)
rollback;

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧