关于触发器删除多表不成功的问题!

食肉兽 2008-06-05 09:36:33
我做了一个A表删除触发器,但是另外我想同时删除另外一张表的数据,可好象是不能删除另外一张表的数据啊!
真是搞不明白!
...全文
147 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
nzperfect 2008-06-05
  • 打赏
  • 举报
回复
所以我从来不用触发器
原因:
因为它隐藏业务逻辑,不易被程序员发现
因为触发器不容易处理数据
因为多个人写触发器,有时写成死while
因为一个系统有几k个触发器的话,太难维护
....

个人意见,不代表正确性...
zhou968 2008-06-05
  • 打赏
  • 举报
回复
写日志的时候 set nocount off
完了再 set nocount on
nzperfect 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 soso729 的回复:]
找到原因了,是程序里控制了如果删除第一张表返回1就删除第二表,但触发器里写了如果删除就在日志表里插入一条记录,这时既执行了删除又执行了插入日志表,所以就返回2,怎么做可以还是返回1呢?
[/Quote]

在程序里用事物控制,可以保证数据的一致性
如果where条件是主键,就不用判断第一次删除是否返回1了.
dlpseeyou 2008-06-05
  • 打赏
  • 举报
回复
有外键吧
食肉兽 2008-06-05
  • 打赏
  • 举报
回复
找到原因了,是程序里控制了如果删除第一张表返回1就删除第二表,但触发器里写了如果删除就在日志表里插入一条记录,这时既执行了删除又执行了插入日志表,所以就返回2,怎么做可以还是返回1呢?
食肉兽 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 perfectaction 的回复:]
引用 5 楼 soso729 的回复:
可能我没说明白,我用.net程序做了删除表数据功能,同时删除两张表,运行一直正常,现在在第一张表里加了触发器,结果删除的时候提示失败,第一张表的数据被删除了,却不能删除第二张表数据


第一张表里加的触发器不是删除第二个张吧.
如果不是,那你把这两次删除放在一个事务里,就不会出现只删除第一个表而没删除第二个表的现象发生了.
[/Quote]

触发器里没有写删除第二张,
没有用事务,
先删除第一张,成功了
再删除第二张,不成功
想知道为什么,不会是sqlserver的原因吧
nzperfect 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 soso729 的回复:]
可能我没说明白,我用.net程序做了删除表数据功能,同时删除两张表,运行一直正常,现在在第一张表里加了触发器,结果删除的时候提示失败,第一张表的数据被删除了,却不能删除第二张表数据
[/Quote]

第一张表里加的触发器不是删除第二个张吧.
如果不是,那你把这两次删除放在一个事务里,就不会出现只删除第一个表而没删除第二个表的现象发生了.
ojuju10 2008-06-05
  • 打赏
  • 举报
回复

不要用触发器,直接用sql语句删除
食肉兽 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 roy_88 的回复:]
SQL code有外健關系時用級聯刪除
create table T(ID int unique)

create table T22 (ID int references T(ID) on delete cascade)
create table T33 (ID int references T(ID) on delete cascade)
[/Quote]

也没有设外键
食肉兽 2008-06-05
  • 打赏
  • 举报
回复
不是主子表关系
食肉兽 2008-06-05
  • 打赏
  • 举报
回复
可能我没说明白,我用.net程序做了删除表数据功能,同时删除两张表,运行一直正常,现在在第一张表里加了触发器,结果删除的时候提示失败,第一张表的数据被删除了,却不能删除第二张表数据
中国风 2008-06-05
  • 打赏
  • 举报
回复
有外健關系時用級聯刪除
create table T(ID int unique)

create table T22 (ID int references T(ID) on delete cascade)
create table T33 (ID int references T(ID) on delete cascade)
Limpire 2008-06-05
  • 打赏
  • 举报
回复
其它问题,不看代码就不知道什么情况了。
yrwx001 2008-06-05
  • 打赏
  • 举报
回复
create trigger tr_tb_d on tb for delete
as
delete tb1 from tb1,deleted where tb1.keycol = deleted.keycol
Limpire 2008-06-05
  • 打赏
  • 举报
回复
A表是主键表/B表示外键表的话,要用instead of触发器,先删除从表B的数据,再删主表A的数据。

22,209

社区成员

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

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