SQL Server堆栈溢出故障排除错误

时间:2011-07-15 12:37:30

标签: sql-server tsql debugging stack-overflow

如何有效地解决此错误?

  

查询处理器在查询优化期间耗尽了堆栈空间。   请简化查询。

     

Msg 8621,Level 17,State 2

我试图附加分析,但我不确定我是否选择了正确的消息。我确实看到了错误。估计执行计划也会出现此错误。

我正在调用的sproc只是在一个表上执行一个非常简单的UPDATE。有一个UPDATE触发器,但我禁用了它,但它仍然给我这个错误。我甚至拿出相同的UPDATE语句并手动提供了值。它没有快速返回,仍然给我错误。

修改 好的,我生成的脚本正在设置PK。因此,如果我设置PK和另一列,我会收到此错误。这些方面有什么建议吗?

4 个答案:

答案 0 :(得分:4)

There's a microsoft KB article about this.

基本上这是一个错误,你需要更新。我假设您正在运行SQL Server 2005 sp2?

答案 1 :(得分:0)

与表相关的外键数量超过Microsoft建议的最大值253时,经常会出现此错误。

您可以通过以下代码行临时禁用约束:

EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

您的删除/更新命令

并在执行命令后,按如下所示再次启用它:

EXEC sp_MSforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

希望有帮助。

答案 2 :(得分:-1)

这个PK引用了大量的FK。我更改了代码,不再更新PK。

答案 3 :(得分:-1)

这不是一个错误!听起来丹尼尔能够得出的结论是,查询并不像他原先想的那么简单。

This article似乎回答了与丹尼尔一样的问题。我也因为不同的(合法的)原因而遇到了同样的错误。在没有人预料到的数据的数据库上运行动态SQL会导致单个select语句包含数百个表。