为啥数据删不掉?

daoyinchen 2013-08-09 09:32:49
数据库公司不知道做了啥限制,用delete删除时,返回结果是删除成功,但一查询,数据还在那。
而且就这一个表,能添加、修改,不能删除,删除提示成功,但实际数据还有。
服务器上装有公司的一个服务,但它是怎么不允许删除的呢?
求解,先谢谢各位了!
...全文
246 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
KeepSayingNo 2013-08-09
  • 打赏
  • 举报
回复
看了下,你这个是人员表,估计公司不让删除人员信息吧
rubynle 2013-08-09
  • 打赏
  • 举报
回复
15楼正解,这是个instead触发器,就相当于所以delete命令执行的都是instead触发器里的内容
發糞塗牆 2013-08-09
  • 打赏
  • 举报
回复
引用 14 楼 daoyinchen 的回复:
[quote=引用 13 楼 DBA_Huangzj 的回复:] 禁用触发器试试,不过试之前你最好问问为什么不允许删除
为了防止修改数据吧,我就是好奇他是怎么实现的,问过公司一次,就说不要删[/quote]先判断里面有没有记录咯,有的话所有删除操作都回滚。
Shawn 2013-08-09
  • 打赏
  • 举报
回复
AFTER类型的触发器(也叫FOR类型)的触发器,是数据操作后,才触发。INSERTED类型的触发器是数据操作前触发,而且往后,不会再操作数据库。望名可以思议
Shawn 2013-08-09
  • 打赏
  • 举报
回复
引用 11 楼 daoyinchen 的回复:
[quote=引用 9 楼 rockyljt 的回复:] 就是嘛,触发器控制了——不允许删除了
但给这个触发器删除掉,或者给语句注释了,仍不行的[/quote] 触发器是:instead of delete 类型,注意了:instead类型的触发器相当于: DELETE命令过来后,直接走触发器中的代码,再往下,没有了…… 就是说,这个触发器会屏蔽掉你所有的DELETED命令。而只会执行一下触发器中的代码。如果你把这个触发器中的代码都注释掉,就相当于:屏蔽所有的DELETE命令。
daoyinchen 2013-08-09
  • 打赏
  • 举报
回复
引用 13 楼 DBA_Huangzj 的回复:
禁用触发器试试,不过试之前你最好问问为什么不允许删除
为了防止修改数据吧,我就是好奇他是怎么实现的,问过公司一次,就说不要删
發糞塗牆 2013-08-09
  • 打赏
  • 举报
回复
禁用触发器试试,不过试之前你最好问问为什么不允许删除
---涛声依旧--- 2013-08-09
  • 打赏
  • 举报
回复
触发器删掉了,肯定行了
daoyinchen 2013-08-09
  • 打赏
  • 举报
回复
引用 9 楼 rockyljt 的回复:
就是嘛,触发器控制了——不允许删除了
但给这个触发器删除掉,或者给语句注释了,仍不行的
Mr_Nice 2013-08-09
  • 打赏
  • 举报
回复
引用 8 楼 daoyinchen 的回复:
[quote=引用 3 楼 rockyljt 的回复:] Oracle的还须按提交才会彻底删除的 SQL server的不存在此情况,除非有触发器回滚或其子表有外键须先删除子表记录再删主表记录
是SQL Server2008,有一个触发器,但里面没有回滚 触发器如下: ALTER trigger [dbo].[trg_del] on [dbo].[drv_user] instead of delete AS BEGIN declare @cou int select @cou=count(*) from deleted; if (@cou>0) RAISERROR('数据不允许删除!', 16, 1) END[/quote] @cou>0 --只要是删除就已经被拒绝了哦。
---涛声依旧--- 2013-08-09
  • 打赏
  • 举报
回复
就是嘛,触发器控制了——不允许删除了
daoyinchen 2013-08-09
  • 打赏
  • 举报
回复
引用 3 楼 rockyljt 的回复:
Oracle的还须按提交才会彻底删除的 SQL server的不存在此情况,除非有触发器回滚或其子表有外键须先删除子表记录再删主表记录
是SQL Server2008,有一个触发器,但里面没有回滚 触发器如下: ALTER trigger [dbo].[trg_del] on [dbo].[drv_user] instead of delete AS BEGIN declare @cou int select @cou=count(*) from deleted; if (@cou>0) RAISERROR('数据不允许删除!', 16, 1) END
daoyinchen 2013-08-09
  • 打赏
  • 举报
回复
引用 5 楼 wwwwgou 的回复:
看一下这个表,是否有DELETE触发器。是否在触发器中给ROLLBACK了?
确实有个触发器,但没有ROLLBACK语句 触发器如下: ALTER trigger [dbo].[trg_del] on [dbo].[drv_user] instead of delete AS BEGIN declare @cou int select @cou=count(*) from deleted; if (@cou>0) RAISERROR('数据不允许删除!', 16, 1) END
Andy__Huang 2013-08-09
  • 打赏
  • 举报
回复
用这个语句检查是否有触发器存在? select * from sysobjects where xtype='TR' 如果有,查看里面的代码是什么?
Shawn 2013-08-09
  • 打赏
  • 举报
回复
看一下这个表,是否有DELETE触发器。是否在触发器中给ROLLBACK了?
chen357313771 2013-08-09
  • 打赏
  • 举报
回复
有返回影响行数吗?
---涛声依旧--- 2013-08-09
  • 打赏
  • 举报
回复
Oracle的还须按提交才会彻底删除的 SQL server的不存在此情况,除非有触发器回滚或其子表有外键须先删除子表记录再删主表记录
daoyinchen 2013-08-09
  • 打赏
  • 举报
回复
引用 1 楼 hdhai9451 的回复:
你做delete删除是在查询分析里面做的吗?
是的,是在查询分析器里面,而且也返回删除成功了,但再一执行select,数据还在
Andy__Huang 2013-08-09
  • 打赏
  • 举报
回复
你做delete删除是在查询分析里面做的吗?
daoyinchen 2013-08-09
  • 打赏
  • 举报
回复
引用 15 楼 wwwwgou 的回复:
[quote=引用 11 楼 daoyinchen 的回复:] [quote=引用 9 楼 rockyljt 的回复:] 就是嘛,触发器控制了——不允许删除了
但给这个触发器删除掉,或者给语句注释了,仍不行的[/quote] 触发器是:instead of delete 类型,注意了:instead类型的触发器相当于: DELETE命令过来后,直接走触发器中的代码,再往下,没有了…… 就是说,这个触发器会屏蔽掉你所有的DELETED命令。而只会执行一下触发器中的代码。如果你把这个触发器中的代码都注释掉,就相当于:屏蔽所有的DELETE命令。[/quote 谢谢,学习了!
加载更多回复(1)

34,590

社区成员

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

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