触发器inserted和deleted表请教!

huangya_0604 2009-03-25 06:24:30
我有一个触发器:
CREATE TRIGGER TR_SD_ProdNote_M_IU
ON dbo.SD_ProdNote_M
FOR Insert, Update
AS
BEGIN
DECLARE @GUID uniqueidentifier
IF Exists(
SELECT i.GUID
FROM inserted i left join deleted d on i.GUID = d.GUID
WHERE IsNull(i.sIsPurchase,'N') = 'Y' and IsNull(d.sIsPurchase,'N') <> 'Y' )

BEGIN
-- 对表PP_DyeNotice_D的插入操作还需要在SD_ProdNote_D的触发器中编写. 因为PP_DyeNotice_M的数据先于PP_DyeNotice_D插入.
IF Exists(SELECT b.GUID
FROM inserted i inner join
PP_DyeNotice_M b on i.GUID = b.SD_ProdNote_MGUID left join
deleted d on i.GUID = d.GUID
WHERE sNoticeType = 'W'
and IsNull(i.sIsPurchase,'N') = 'Y' and IsNull(d.sIsPurchase,'N') <> 'Y')
BEGIN

UPDATE PP_DyeNotice_M
SET fOrderQuan = od.fStandQuan
FROM inserted i inner join
SD_Order_D od on i.SD_Order_DGUID = od.GUID left join
deleted d on i.GUID = d.GUID
WHERE i.GUID = PP_DyeNotice_M.SD_ProdNote_MGUID and PP_DyeNotice_M.sNoticeType = 'W'
and IsNull(i.sIsPurchase,'N') = 'Y' and IsNull(d.sIsPurchase,'N') <> 'Y'
END
ELSE
BEGIN
SET @GUID = newid()
INSERT INTO PP_DyeNotice_M
(GUID, SD_ProdNote_MGUID, sNoticeNo, dProdDeliDate, sNoticeType,
sProdSpec, fOrderQuan, fShrinkRate, sStatusID, dInputDate )
SELECT @GUID, i.GUID, 'CDN'+i.sProNoticeCode, i.dProdDeliDate, 'W',
sSpecification, od.fStandQuan, IsNull(fWasteRate,0), 'N', getdate()
FROM inserted i inner join
SD_Order_D od on i.SD_Order_DGUID = od.GUID inner join
BD_Part bp on od.BD_PartGUID = bp.GUID left join
deleted d on i.GUID = d.GUID
WHERE IsNull(i.sIsPurchase,'N') = 'Y' and IsNull(d.sIsPurchase,'N') <> 'Y'
-- 插入PP_DyeNotice_D

INSERT INTO PP_DyeNotice_D
(GUID, PP_DyeNotice_MGUID, SD_ProdNote_DGUID, sItemNO, sCheckColor, fQuantity, sSaleOrderCode, sSaleOrderItem,
sCustomerPO, sStyle, iSampleQuantity, dProdDeliDate, sStatusID, dInputDate, sRemark)
SELECT newid(), @GUID, pd.GUID, pd.sItemNO, pd.sCheckColor, pd.fStandQuan, om.sSaleOrderNO, od.sItemNO,
pd.sCustomerPO, pd.sStyle, pd.fSampleQuantity, i.dProdDeliDate, 'N', getdate(), 'AutoInsert(外购成品布)'
FROM SD_ProdNote_D pd inner join
inserted i on pd.SD_ProdNote_MGUID = i.GUID inner join
sd_order_d od on i.SD_Order_DGUID = od.guid inner join
sd_order_m om on od.SD_Order_MGUID = om.guid left join
deleted d on i.GUID = d.GUID
WHERE IsNull(i.sIsPurchase,'N') = 'Y' and IsNull(d.sIsPurchase,'N') <> 'Y'
END

END

我第一次保存的时候触发器就会有问题:只往PP_DyeNotice_M表写了数据,PP_DyeNotice_D的数据就是写不进去,非要再重新触发这个触发器,PP_DyeNotice_D才会写进数据。
是不是我红色部分出了问题?请大侠指教!谢谢!
...全文
139 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
htl258_Tony 2009-03-25
  • 打赏
  • 举报
回复
跟你那个else有关系。

34,576

社区成员

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

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