从SQL Server 2008迁移到SQL Server 2012 Express

从SQL Server 2008迁移到SQL Server 2012 Express,sql,sql-server-2008,sql-server-2012-express,Sql,Sql Server 2008,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.col

我正在将一个应用程序从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外部联接 运算符(
“*=”或“=*”
)。要运行此查询而不进行修改, 请使用将当前数据库的兼容性级别设置为80 alterdatabase的SET COMPATIBILITY\u LEVEL选项。这是强烈的 建议使用ANSI外部联接运算符重写查询(左 外部联接,右外部联接)。在SQL Server的未来版本中, 即使在中,也不支持非ANSI联接运算符 向后兼容模式

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

ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 80;

这似乎有点牵强。但是没有一些真实的信息,这是我唯一的猜测。

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

我想不出有什么。也许您可以展示一个示例和实际的错误消息。这里有一些聪明的人,但很少有读心术的人。对不起,我知道这是含糊不清的,但到处都是错误。有些语法,有些说对象不存在,等等。我以前没有使用过MS产品,但我认为它可能类似于从perl4到perl5,或者从PHP4到php5,在这种情况下,某些东西会中断,并且有一个转换指南。我不知道会是这样,我还没有找到一个,但我怀疑类似的事情可能是答案。我将添加一些实际的错误消息。谢谢。我收到的消息之一是“*=”附近的语法不正确。它以前是与2000版兼容的数据库。我从未见过这种语法。转换或了解需要转换的内容的最佳方法是什么?@zortacon:错误消息说明了一切:
强烈建议使用ANSI外部联接运算符(左外部联接,右外部联接)重写查询。