触发器 判断执行

wangming0605 2010-11-04 11:06:09
触发器,PURTB表的TB025 由N 变Y 时执行,执行时,判断字段TB030是否为空,为空,回滚!
如果不为空,继续判断,TB030在表COPTD是否存在,不存在,回滚
继续判断,TB030在表PURTD中是否存在,存在,回滚
以下代码老是不起作用,有问题,请高手改一下,谢谢!

CREATE TRIGGER TR_INSERTPURTB2 ON [dbo].[PURTB]
FOR UPDATE
AS
DECLARE @TB001 CHAR(10), --销货单单别
@TB002 CHAR(11), --销货单单号
@TB003 CHAR(10), --销货单序号
@TB004 CHAR(20),
@TB025 CHAR(2),
@TB0252 CHAR(2),
@TB029 CHAR(20), --请购参考单别
@TB030 CHAR(20), --请购参考单号
@TB031 CHAR(20), --请购参考序号
@TD021 CHAR(20), --采购参考单号
@TD013 CHAR(20), --采购参考单别
@TD023 CHAR(20), --采购参考序号
@TD001 CHAR(20), --销售单别
@TD002 CHAR(20),
@TD003 CHAR(20)
BEGIN TRANSACTION
set nocount on --将影响资料笔数的计数器关掉
SELECT @TB001=TB001,@TB002=TB002,@TB003=TB003,@TB004=TB004,@TB025=TB025,@TB029=TB029
,@TB030=TB030,@TB031=TB031 FROM DELETED
SELECT @TB0252=TB025 FROM INSERTED
SELECT @TD021=TD021,@TD023=TD023 FROM PURTD WHERE TD021=@TB030 AND TD013=@TB029
AND TD023=@TB031
SELECT @TD001=TD001,@TD002=TD002,@TD003=TD003 FROM COPTD
WHERE TD001=@TB029 AND TD002=@TB030 AND TD003=@TB031
if @TB025='N' AND @TB0252='Y' AND @TB001='3101' and @TB030=''
BEGIN

ROLLBACK TRANSACTION
RAISERROR ('注意,物料单价不能为零,请供应商找采购小杨、财务虞会计把价格协商好再来办理入库手续,有不便的地方还请谅解,谢谢。泛亚汽车
! : %s.',16,1)
END

IF @TD021<>'' AND @TB025='N' AND @TB0252='Y' AND @TB001='3101'
BEGIN
ROLLBACK TRANSACTION
RAISERROR ('注意,参考单号已经存在于采购单中,这是多采购,请总经理审核
! : %s.',16,1)
END
IF @TD002='' AND @TB025='N' AND @TB0252='Y' AND @TB001='3101'
BEGIN
ROLLBACK TRANSACTION
RAISERROR ('注意,参考单号,在销售订单中不存在,请核对好本批料对应的销售订单,重新输入正确的参考单号
! : %s.',16,1)
END

set nocount off --将影响资料笔数的计数器再重新打开
COMMIT TRANSACTION
...全文
196 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
samyou 2010-11-05
  • 打赏
  • 举报
回复
查询数据不用事务了,编辑数据就用吧
abuying 2010-11-04
  • 打赏
  • 举报
回复
其实不用事务的也可以的。
因为没有更新数据库。只是查询,加上简单的共享锁就可以了。

SELECT @TB001=TB001,@TB002=TB002,@TB003=TB003,@TB004=TB004,@TB025=TB025,@TB029=TB029
,@TB030=TB030,@TB031=TB031 FROM DELETED --这里为空,因为只有update才触发,要么你前面定义为for update,delete
SELECT @TB0252=TB025 FROM INSERTED
SELECT @TD021=TD021,@TD023=TD023 FROM PURTD WHERE TD021=@TB030 AND TD013=@TB029
AND TD023=@TB031
SELECT @TD001=TD001,@TD002=TD002,@TD003=TD003 FROM COPTD
WHERE TD001=@TB029 AND TD002=@TB030 AND TD003=@TB031
--因为上面没值,所以下面全都 为null
--你的判断失效了
wangming0605 2010-11-04
  • 打赏
  • 举报
回复
不是很明白! 我这里有两个问题:
1,IF 结构是否正确??
2,判断的数据抓取是否正确??

34,590

社区成员

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

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