今天在对比数据库的时候,发现有几个触发器总是同步不了。仔细查看之后,才发现这几个触发器所依附的表已经在之前被我删掉了。以前一直都没有发现这个问题,也觉的这是不可能发生的问题,所以在群中问了一大家,有朋友说,表删除后不一定会删除
触发器,我信了,但总觉的不太可靠,因为以前都是直接删除表的,也没发现这样的问题。又觉的应该是我使用drop table的sql语句来删除的,是不是使用sql语句删除的表不会同时删除触发器呢,又特地做了一个测试,创建一个表,再创建一个表触发器,然后用drop table的方式删除表,结果触发器有被同步删除了。
说明,我这里说的表是dml触发器,不是ddl触发器。
然后发贴到csdn,结果没有朋友相信。
为了证明在我的电脑上确实出了该bug,又特地重新找来数据库备份文件,将该bug重现一次,并截图如下:
说明一下我的图片:
首先为了让两条sql的结果都显示在"结果"栏,我把输出结果调成了以文本形式显示。
为了证明我没有做作弊,我是将两个sql写一个查询分析器中一并执行的。
先看第一个sql:
select * from [dbo].[Cost_PreReceivable]
该sql直接返回错误:对象名 'dbo.Cost_PreReceivable' 无效。说明我这个表是不存在的。
然后第二个sql:
sp_helptext tu_Cost_PreReceivable
是显示tu_Cost_PreReceivable触发器的定义,从输出的结果可以看出,该触发器所依附的表确实是Cost_PreReceivable。
我也希望是我搞错了,望大家能帮我找出其中原因。