执行简单的删除
delete from config.wtinfo where wfid = 100001
消息 8621,级别 17,状态 1,第 1 行
查询处理器在优化查询时堆栈空间不足。请简化查询。
这张表中跟它有关系的表有几百张。具体我也不清楚有哪些表?这个表的数据非常重要。在不删除表和数据的前提下怎么解决这个问题。高分求解!谢谢高手!
------解决思路----------------------
表中有触发器吗
目前服务器内存占用多少
------解决思路----------------------
那要看触发器都干了些什么了
可以禁用触发器再删除数据,但风险是删除的数据没有处理触发器干的,可能造成数据不一致。
很可能是,触发器中还会触发触发器,连锁才会堆栈不足。
------解决思路----------------------
外键问题,
删除数据必须先删除子表外键对应的数据,然后在删除主表中的数据。
因为之前,没有实现级联删除,才导致这个问题的出现。
------解决思路----------------------
找到与config.wtinfo有主外键关系的表
方法一:逐一删除外键所在表对应的数据,最后删除主表
方法二:实现级联删除,这样只要用上面的sql删除主表的数据,子表的对应数据也会自动删除掉。
------解决思路----------------------
不知道你的意思是不是这样:
1)只删除这个主表的数据,其它子表对应的数据不动,也就是其它子表数据不用删除。
2)以后这个表只插入和更新数据,不作删除。
------解决思路----------------------
外键设置太多了,这是设计问题,应该选择一些不必是很必要的外键删除,直到从表没有数据的主表数据可以删除
实际上,大部分应用应该可以不必要靠外键来维持一致性的,前端程序应该维持数据一致
------解决思路----------------------
要不取消外键关系~~
一般设计时,不把外键让数据库来做的,因为容易出现这样的维护问题导数据改数据问题,一般在程序上体现
------解决思路----------------------
有可能是触发器,当在主表插入一条数据,其它子表的数据也插入了数据。
不然照你说的情况,是可以删除数据的。
不管怎样,你要解决的话,需要找到这张表对应的外键关系。可以先取消主外键关系,删除数据后,再恢复。
------解决思路----------------------
如果以它当主表的从表 没有插过数据,是不会有这样的问题的
你可以查看下,引用了它的表,
SELECT B.[name] parTable,C.[name] parCol FROM sys.foreign_key_columns A LEFT JOIN sys.objects B ON B.[object_id]=A.parent_object_id LEFT JOIN sys.columns C ON A.parent_object_id=C.[object_id] AND A.parent_column_id=C.column_id
WHERE referenced_object_id=OBJECT_ID('A1')
------解决思路----------------------
若外键太多,会不会是非数据BUFFER不足导致,这在32上会有这个可能
另外,如果外键上无索引和数据量大,也可能导致
数据的IUD本来很简单,但现实中的业务逻辑复杂,就导致了IUD也复杂了
------解决思路----------------------
这是递归触发器导致的,建议禁用触发器,使用代码删除关联数据。