从SQL Server 2008迁移到SQL Server 2012 Express

zor*_*con 0 sql sql-server-2008 sql-server-2012-express

我正在将一个应用程序从SQL Server 2008移动到SQL Server 2012 Express,一切都很好,但是有几个存储过程说我有语法错误.我已经在线查看并且没有找到答案 - SQL Server 2008(标准版)中是否支持SQL Server 2012 Express中不支持的语法类型?

Aar*_*and 5

我想有一种可能性,如果在2008年你使用2000兼容模式,并且你的存储过程有旧式外连接:

SELECT o.name, c.name
FROM sys.objects AS o, sys.columns AS c
WHERE o.[object_id] *= c.[object_id];
Run Code Online (Sandbox Code Playgroud)

此语法适用于SQL Server 2000,但从那时起已被弃用.如果你使用80兼容模式,你可以在2005年,2008年和2008年R2中使用它.从SQL Server 2012开始,您不能再使用80 compat模式,因此上述代码将失败:

消息102,级别15,状态1,行3
'*='附近的语法不正确.

在2008年,您将收到此错误消息:

消息4147,级别15,状态1,行3
查询使用非ANSI外部联接运算符("*=" or "=*").要在不进行修改的情况下运行此查询,请使用ALTER DATABASE的SET COMPATIBILITY_LEVEL选项将当前数据库的兼容级别设置为80.强烈建议使用ANSI外连接运算符(LEFT OUTER JOIN,RIGHT OUTER JOIN)重写查询.在SQL Server的未来版本中,即使在向后兼容模式下也不支持非ANSI连接运算符.

但是,如果您按照错误消息中的建议更改数据库,它将起作用:

ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 80;
Run Code Online (Sandbox Code Playgroud)

这似乎是一个延伸.但是如果没有一些真实的信息,那就是我唯一的猜测.