当前位置: 代码迷 >> Sql Server >> SQL Delete 触发器解决方案
  详细解决方案

SQL Delete 触发器解决方案

热度:61   发布时间:2016-04-24 09:48:30.0
SQL Delete 触发器
--SQL Delete 触发器
--在程序中删除表a1保存不成功。

ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1]
 For delete AS
BEGIN
        if @@rowcount=0 return
update b1 set a1_idnote='' from b1,deleted where b1.a1_id=deleted.id

END

--SQL Delete 触发器
--在程序中删除表a1保存不成功。
ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1]
 For delete AS
BEGIN
update b1 set a1_idnote='' from b1,deleted where b1.a1_id=deleted.id

update b2 set a1_idnote='' from b2,deleted where b2.a1_id=deleted.id

END

--SQL Delete 触发器
--在程序中删除表a1保存成功。

ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1]
 For delete AS
BEGIN
update b1 set a1_idnote='' from b1,deleted where b1.a1_id=deleted.id

--update b2 set a1_idnote='' from b2,deleted where b2.a1_id=deleted.id

END

--SQL Delete 触发器
--在程序中删除表a1保存成功。

ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1]
 For delete AS
BEGIN
--update b1 set a1_idnote='' from b1,deleted where b1.a1_id=deleted.id

update b2 set a1_idnote='' from b2,deleted where b2.a1_id=deleted.id

END


--为什么多笔语法会保存不成功,是否与什么配置有关或其他什么原因?

------解决思路----------------------
不成功的错误消息是什么?
是否 b1、b2 有 update 触发器?
------解决思路----------------------


-- 这个不是 SQL Server 的语法。
ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1]
 For delete AS

-- 你改成
ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1]
 after delete AS


------解决思路----------------------
这个信息没啥用,出错被回滚了~

逻辑问题
deleted 这时是a1的没错
update b1 set a1_idnote='' from b1,deleted where b1.a1_id=deleted.id
deleted 这时是b1的了
update b2 set a1_idnote='' from b2,deleted where b2.a1_id=deleted.id
------解决思路----------------------
引用:
Quote: 引用:

这个信息没啥用,出错被回滚了~

逻辑问题
deleted 这时是a1的没错
update b1 set a1_idnote='' from b1,deleted where b1.a1_id=deleted.id
deleted 这时是b1的了
update b2 set a1_idnote='' from b2,deleted where b2.a1_id=deleted.id


在Sybase上跑没问题,移到MS SQL2008 则出现问题,难道 deleted 虚拟表在SQL当前成全局使用?


呃 不是,是我的错,之前的数据问题~~
deleted 这时是a1的没错
update b1 set a1_idnote='' from b1,deleted where b1.a1_id=deleted.id
deleted 这时还是a1
update b2 set a1_idnote='' from b2,deleted where b2.a1_id=deleted.id
------解决思路----------------------
程序通过时间戳是否变化、或者比较所有字段是否变化来判断数据是否发送改变。
所以要比较 a1 表在 Sybase 和 SQL Server 中的各个字段,某些数据类型是否取值精度不一样,而你PB中的定义不变,从而导致比较时一直认为是数据发生了改变。。
------解决思路----------------------
sybase和ms sqlserver的SQL语法都是差不多的,但是表是否创建的时候由于字段的数据类型有差异造成的
  相关解决方案