代码之家  ›  专栏  ›  技术社区  ›  Krishna Kumar

为什么“服务器在编译时遇到堆栈溢出”错误是SQL server 2000 Sp4

  •  0
  • Krishna Kumar  · 技术社区  · 16 年前

    我试图在这个查询中包含大约6290个“和”条件。我在大约11945'或'的条件下得到相同的结果。

    服务器在编译时遇到堆栈溢出。在System.Data。 lClient.SqlConnection.OnError(SqlException异常,布尔断开连接) ,布尔断开连接)

    2 回复  |  直到 16 年前
        1
  •  2
  •   gbn    16 年前

    尝试并优化您的和/或条件。

    SELECT * FROM foo
    WHERE ([fooKey] = 1 AND Year = 1995)
    OR ([fooKey] = 1 AND Year = 1996)
    OR ([fooKey] = 1 AND Year = 1997)
    OR ([fooKey] = 1 AND Year = 1998)
    OR ([fooKey] = 1 AND Year = 1999)
    OR ([fooKey] = 1 AND Year = 2000)
    OR ([fooKey] = 1 AND Year = 2001)
    OR ([fooKey] = 1 AND Year = 2002)
    ... ad infinitum
    

    变成

    SELECT * FROM fooWHERE ([fooKey] = 1 AND Year between 1995 and 2002)
    union
    SELECT * FROM fooWHERE ([fooKey] = 10017 AND Year = 1995)
    union
    SELECT * FROM fooWHERE ([fooKey] = 10018 AND Year = 1997)
    ... slightly less
    

        2
  •  1
  •   Jesse Pepper    16 年前

    有趣的虫子!最明显的问题是, 为什么? 堆栈溢出是因为递归是解析这样的SQL语句的典型方式,它构建了一个语法树。根据每次递归调用推送到堆栈上的内容,这并不奇怪。它伤害了服务器吗?;)