【问题标题】:Syntax errors when migrating a .bak created in SQLServer 2000 to SQLServer 2008 then to SQLServer 2012将在 SQL Server 2000 中创建的 .bak 迁移到 SQL Server 2008(当迁移到 SQLServer 2012 时)时出现语法错误
【发布时间】:2014-02-06 00:13:21
【问题描述】:

SQLServer 2012 在执行存储过程时向我发送语法错误:

        where DOC.ID_DOC = @pi_ID_DOC
        and DOC.ID_DOC = DET.ID_DOC
        and DET.RECIBO_CONCEP = REC.RECIBO_CONCEP
        and DOC.CUENTA = CTO.CUENTA
        and DOC.CTA_CONSEC = CTO.CTA_CONSEC
        and CTA.CUENTA = CTO.CUENTA
        and DOC.CUENTA *= LEC.CUENTA
        and DOC.CTA_CONSEC *= LEC.CTA_CONSEC
        and DOC.BIMESTRE *= LEC.BIMESTRE

尤其是在使用表达式“*=”时。

我在 SQLServer 2008 中执行了相同的存储过程,没有任何更改。

“*=”与“=”的含义是否不同?
SQL Server 2008 和 SQL Server 2012 之间的语法是否有变化?

【问题讨论】:

    标签: sql sql-server-2008 sql-server-2005 sql-server-2012


    【解决方案1】:

    *= (AND =*) 是使用旧式语法的外连接(在 Oracle 中仍然很流行的语法,但一直是 deprecated since SQL Server 2008officially discontinued in SQL Server 2012)。此语法不再受支持,并且存在许多问题。这里有一些信息:

    Bad habits to kick : using old-style JOINs

    您需要将这些查询重新写入现代 LEFT / RIGHT JOIN 版本,以使其与 SQL Server 2012 兼容。您应该在 2008 实例上创建新版本的查询并保留旧版本,以便您可以验证重写是否返回正确的结果。

    Erland Sommarskog 的指南可能会有所帮助:

    Become an ANSI Star

    This MSDN forum thread might also be useful.

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 2011-09-20
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      相关资源
      最近更新 更多