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之间的语法是否有变化?
答案 0 :(得分:1)
*=
(AND =*
)是使用旧式语法的外部联接(语法在Oracle中很流行,但已经deprecated since SQL Server 2008和officially discontinued in SQL Server 2012) 。不再支持此语法,它有许多问题。这里有一些信息:
Bad habits to kick : using old-style JOINs
您需要将这些查询重新编写为现代LEFT / RIGHT JOIN
版本,以使它们与SQL Server 2012兼容。您应该在2008实例上创建新版本的查询并保留旧版本,这样您就可以验证重写是否会返回正确的结果。
Erland Sommarskog有一个可能有所帮助的指南: