繁体   English   中英

从SQL Server 2008迁移到SQL Server 2012 Express

[英]Moving from SQL Server 2008 to SQL Server 2012 Express

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

我猜有一种可能,如果在2008年您使用的是2000兼容模式,并且您的存储过程具有旧式的外部联接:

SELECT o.name, c.name
FROM sys.objects AS o, sys.columns AS c
WHERE o.[object_id] *= c.[object_id];

此语法在SQL Server 2000中有效,但此后不推荐使用。 在2005、2008和2008 R2中,如果使用80兼容模式,您可以试一下。 从SQL Server 2012开始,您将无法再使用80兼容模式,因此上述代码将因以下原因而失败:

Msg 102,第15级,状态1,第3行
'* ='附近的语法不正确。

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

Msg 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;

这似乎是一个拉伸。 但是没有一些真实的信息,这是我唯一的猜测。

这是SQL Server 2012中不推荐使用的功能的列表 -特别看看T-SQL部分。 您还可以使用SSDT(SQL Server数据工具),创建数据库的脱机副本,然后将目标版本设置为SQL Server 2012-输出将显示出版本之间的许多语法不兼容。 我写了一篇博客有关SSDT可能会有所帮助这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM