怎样写触发器!...

beadly 2003-08-21 02:37:11
三个表
1:库存表(material) 物料编号,库存....
idno quantity (主键为idno)
2:入库单(feedin) 单据编号,日期....
receipt inputday (主键为receipt)
3:入库单明细(feedinme) 单据编号,物料编号,入库数量
receipt goodsid quantity (主键为receipt+goodsid)
现在要删除一张入库单(0001),那么删除的这张单同时进行的作业有三个
1:在feedin中删除0001的单据
2:在feedinme中删除所有0001的记录
3:在material中把相对的物料的库存减去feedinme中单据号为0001的每记录的入库数
我想把feedin和feedinme做关联,这样删除一张单的时候它就自动删除了单的明细,所以在触发器上写一些代码,但不知道怎么写!
...全文
34 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
beadly 2003-08-26
  • 打赏
  • 举报
回复
不对,
应该写成
delete feedinme from deleted where feedinme.receipt <> deleted.receipt

谢谢 tj_dns(愉快的登山者), lifeforu(苍白到底),zarge(鲨至),zjcxc(邹建) ,大力.zhouzhouzhou(人生程序),happy_0325(快乐)(按出场顺序排名:-)).
可是我觉得应该还可以用其它方法的....
beadly 2003-08-26
  • 打赏
  • 举报
回复
不对;
应该是把上句写成
delete feedinme from deleted where feedinme.receipt <> deleted.receipt
happy_0325 2003-08-26
  • 打赏
  • 举报
回复
delete feedinme from deleted where feedinme.receipt = deleted.receipt
beadly 2003-08-26
  • 打赏
  • 举报
回复
还没解决啊!:(
如果把
delete feedinme from deleted where receipt = deleted.receipt
换上去,检查语法都通不过,报错!
5555.............
beadly 2003-08-26
  • 打赏
  • 举报
回复
啊呀!不对呀!不行呀!....
这句不对delete feedinme from deleted where feedinme.receipt = deleted.receipt
会把所有的记录删除...
beadly 2003-08-25
  • 打赏
  • 举报
回复
大力的CREATE TRIGGER 名 on feedin
INSTEAD OF delete
.....
我执行删除一条feedin后,把所有的feedinme都删除了
angelior 2003-08-25
  • 打赏
  • 举报
回复
delete feedinme from deleted where receipt = deleted.receipt


這句錯了

大力幫你解決了

我也來晚了
beadly 2003-08-23
  • 打赏
  • 举报
回复
CREATE TRIGGER howdele ON [dbo].[feedin]
FOR DELETE
AS
update material set quantity = quantity - feedinme.quantity from feedinme, deleted
where feedinme.receipt = deleted.receipt
and material.idno = feedinme.receipt
delete feedinme from deleted where receipt = deleted.receipt
报错列名quantity 不正确,
列名receipt 不正确,
到底应该怎么写呀!
pengdali 2003-08-23
  • 打赏
  • 举报
回复
这样写支持删除多条。
pengdali 2003-08-23
  • 打赏
  • 举报
回复
CREATE TRIGGER 名 on feedin
INSTEAD OF delete
AS
BEGIN
update material set quantity=material.quantity-tem.quantity from (select goodsid,sum(quantity) quantity from feedinme where receipt in (select receipt from deleted) group by goodsid) tem where material.idno=tem.goodsid
delete feedinme where receipt in (select receipt from feedinme)
delete feedin where receipt in (select receipt from feedinme)
END
zjcxc 元老 2003-08-23
  • 打赏
  • 举报
回复
上面的好像没错吧?
beadly 2003-08-22
  • 打赏
  • 举报
回复
哪里错了?
beadly 2003-08-22
  • 打赏
  • 举报
回复
我依葫芦画瓢还是报错呀!
CREATE TRIGGER howdele ON [dbo].[feedin]
FOR DELETE
AS
update material set quantity = quantity - feedinme.quantity from feedinme, deleted
where feedinme.receipt = deleted.receipt
and material.idno = feedinme.receipt
delete feedinme from deleted where receipt = deleted.receipt
go
lifeforu(苍白到底)也报错!
zarge 2003-08-22
  • 打赏
  • 举报
回复
deleted 和 inserted 是逻辑(概念)表。这些表在结构上类似于定义触发器的表(也就是在其中尝试用户操作的表);这些表用于保存用户操作可能更改的行的旧值或新值。例如,若要检索 deleted 表中的所有值,请使用:
SELECT *
FROM deleted

beadly 2003-08-22
  • 打赏
  • 举报
回复
二位老大,
from deleted 这 deleted 是哪来的呀
lifeforu 2003-08-21
  • 打赏
  • 举报
回复
create trigger trigname on feedinme for delete
as
delete feedin where receipt =select receipt from deleted
update material set quantity=quantity-(select quantity from deleted)
where idno=(select goodsid from deleted)
愉快的登山者 2003-08-21
  • 打赏
  • 举报
回复
create trigger t1 on feedin for delete
as
update material set 库存 = 库存 - feedinme.入库数量 from feedinme, deleted
where feedinme.据编号 = deleted.据编号
and material.物料编号 = feedinme.物料编号
delete feedinme from deleted where 单据编号 = deleted.单据编号
go

愉快的登山者


◢◣◢◣◢◣

34,588

社区成员

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

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