将在SQLServer 2000中创建的.bak迁移到SQLServer 2008,然后迁移到SQLServer 2012时出现语法错误

时间:2014-02-06 00:13:22

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

SQL Server 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之间的语法是否有变化?

1 个答案:

答案 0 :(得分: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