谁能帮我看下这个触发器

yuanylike 2008-07-28 03:14:07
CREATE TRIGGER t_ReGoods ON dbo.tb_ReGoods
FOR INSERT,UPDATE
AS
IF((SELECT INSERTED.ReGoodsSort FROM INSERTED) = 1 )
UPDATE tb_Stock SET StockNum = (SELECT tb_Stock.StockNum+INSERTED.ReGoodsNum)
,NeedPay=(SELECT tb_Stock.NeedPay+(INSERTED.ReGoodsNum*tb_Stock.GoodsPrice))
,HasPay=(SELECT tb_Stock.HasPay+(INSERTED.ReGoodsNum*tb_Stock.GoodsPrice))
FROM INSERTED
WHERE tb_Stock.GoodsID in (SELECT INSERTED.GoodsID FROM INSERTED)

UPDATE tb_Sell SET GoodsNum=(SELECT tb_sell.GoodsNum-INSERTED.ReGoodsNum)
,HasPay=(SELECT tb_Sell.HasPay-INSERTED.ReGoodsNum*INSERTED.ReGoodsPrice)
,NeedPay =(SELECT tb_Sell.NeedPay-INSERTED.ReGoodsNum*INSERTED.ReGoodsPrice)
FROM INSERTED
WHERE tb_Sell.GoodsID in (SELECT INSERTED.GoodsID FROM INSERTED)
就是插入一个值,要同时更改两个表的内容,c#提示:值不唯一,插入失败,可是我数据库表里的值是唯一的,不过where条件不是主键,
问题是:这两个UPDATE中间该怎么写?才能正确执行?
...全文
112 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanylike 2008-07-29
  • 打赏
  • 举报
回复
全是原码照扳,不会有问题,仔细看了好几启遍了
楼上所有的贴子全试过了,我在csdn发了几天的贴子了,好多答案没有一个符合的#14,
哪位大哥帮帮我啊#52
yrwx001 2008-07-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yuanylike 的回复:]
1楼大哥,首先感谢你帮我分析了代码,不过这样的方法我早试过了,第一次就是这么写的,错误的提示一样:子查询返回的值多于一个。当子查询跟随在....之后,或子查询用作表达式时,这种情况是不允许的。
[/Quote]
不能吧. 是你觸發這個trigger 的 insert or update 語句裡面更新的值由問題吧
按照我寫的這個trigger 應該不會有這樣的問題的.
qiuming0306 2008-07-29
  • 打赏
  • 举报
回复
逻辑上的问题,非要这么处理就用MAx吧
-狙击手- 2008-07-29
  • 打赏
  • 举报
回复
CREATE TRIGGER t_ReGoods ON dbo.tb_ReGoods
FOR INSERT,UPDATE
AS

UPDATE a
SET StockNum =a.StockNum+i.ReGoodsNum
,NeedPay=a.NeedPay+i.ReGoodsNum*a.GoodsPrice)
,HasPay=a.HasPay+(i.ReGoodsNum*aGoodsPrice)
FROM tb_Stock a right join INSERTED i
on a.GoodsID = i.GoodsID
where i.ReGoodsSort = 1

UPDATE a
SET GoodsNum=a.GoodsNum-INSERTED.ReGoodsNum
,HasPay=a.HasPay-INSERTED.ReGoodsNum*i.ReGoodsPrice
,NeedPay =a.NeedPay-i.ReGoodsNum*i.ReGoodsPrice
FROM tb_Sell a right join INSERTED i
on a.GoodsID = i.GoodsID
where i.ReGoodsSort = 1
Lyw110 2008-07-29
  • 打赏
  • 举报
回复
字段 = (子查询)
子查询里面的的结果值只能是一行
zb63668331 2008-07-29
  • 打赏
  • 举报
回复
有没有空值情况
yuanylike 2008-07-29
  • 打赏
  • 举报
回复
一个是库存,一个是销售,这两个表不可能一对一,入库和库存是一对一的关系
新鲜鱼排 2008-07-29
  • 打赏
  • 举报
回复
两个表的关联不是1对1引起的错误(子查询返回的值多于一个)
yuanylike 2008-07-28
  • 打赏
  • 举报
回复
1楼大哥,首先感谢你帮我分析了代码,不过这样的方法我早试过了,第一次就是这么写的,错误的提示一样:子查询返回的值多于一个。当子查询跟随在....之后,或子查询用作表达式时,这种情况是不允许的。
yrwx001 2008-07-28
  • 打赏
  • 举报
回复
CREATE TRIGGER t_ReGoods ON dbo.tb_ReGoods 
FOR INSERT,UPDATE
AS
UPDATE tb_Stock SET tb_Stock.StockNum = tb_Stock.StockNum+INSERTED.ReGoodsNum
,tb_Stock.NeedPay= tb_Stock.NeedPay+ INSERTED.ReGoodsNum*tb_Stock.GoodsPrice
,tb_Stock.HasPay=tb_Stock.HasPay+INSERTED.ReGoodsNum*tb_Stock.GoodsPrice
FROM INSERTED,tb_Stock
WHERE tb_Stock.GoodsID = INSERTED.GoodsID AND INSERTED.ReGoodsSort = 1

UPDATE tb_Sell SET tb_Sell.GoodsNum= tb_sell.GoodsNum-INSERTED.ReGoodsNum
,HasPay= tb_Sell.HasPay-INSERTED.ReGoodsNum*INSERTED.ReGoodsPrice
,NeedPay = tb_Sell.NeedPay-INSERTED.ReGoodsNum*INSERTED.ReGoodsPrice
FROM INSERTED,tb_Sell
WHERE tb_Sell.GoodsID = INSERTED.GoodsID AND INSERTED.ReGoodsSort = 1

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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