2011-07-09 130 views
2

我新安装的SQL Server 2008 R2与选择选项安装向后兼容性(添加删除程序显示向后兼容性安装) 然后我运行我的SQL脚本来升级旧的数据库,但它引发异常,如“该查询使用非ANSI外部加入“(见图像确切的错误)。 (SQL分析器说:SQLDMO_1抛出错误)。是否有任何区别SQL Server R2向后兼容性MSI VS下载SQL Server 2005向后兼容性MSI?

enter image description here

但是,当我安装SQLServer的向后兼容性(SQLServer2005_BC.msi从网站下载)明确,做同样的升级换代,它的成功合作。

我不知道为什么会发生?

我比较了两个SQLDMO.DLL(Sql服务器安装一个和SQL服务器一个),但两者似乎都很好。 有没有人得到同类问题或任何建议?

更新: 不,它不是与安装向后兼容性相关的问题。最近发生了同样的错误,我认为这将通过安装兼容bakward的msi来解决,但它并未解决。

所以仍然是原因悬而未决。

+0

当然真正的问题是,您不应该使用SQL Server 2000中甚至不使用的外部连接。Thay有时可能会被错误地解释为交叉连接。修复代码 - 即使您使用兼容模式,也会导致不可靠的结果,这是不正确的代码。 – HLGEM

+0

@HLGEM好吧,它确实是一个糟糕的代码。但是代码是在10年前编写的,它不是100或200 LOC,1000是1000s。无论如何,我必须解决的是,但我现在无法做到。直到必须看到替代品,而且我专注于它为什么会发生?不在做什么? – PawanS

回答

1

SQL Server 2008+不支持旧式ANSI 89连接,即*==*。在升级到SQL Server 2008或更高版本之前,这些将需要用左外连接和右外连接替换。任何包含这些代码的代码都不能在没有引发错误的情况下编译。

SQL Server 2005是支持旧式联接的最高版本。

兼容模式80/90/100主要用于遗留数据库使用新关键字的情况。这将导致语法错误,通过降低兼容性模式从解析器中删除新功能/保留关键字,从而允许有时间从数据库中删除它们。

1

我不认为你得到的错误与向后兼容性组件有关;这听起来更像是一个问题,当你正在运行查询的数据库被设置为80 vs 90或100的兼容模式时,如错误所暗示的,如果运行的查询设置为80,但不是90或100,则运行的查询将起作用。如果你做了全新的sql安装,所有的数据库将被设置为100;如果您进行了升级,则它们将保留在旧版本中,如果它是从SQL 2000升级的,则保留在80.

+0

雅这是真的....但这里是问题是如果我安装向后兼容性与SQL Server一起设置错误正在发生。但是,当向后兼容性明确安装它不会发生。 – PawanS

+0

差距 - 这是有道理的,因为当您安装向后兼容性时,它允许升级后的数据库以80模式运行。当你不选择它时,SQL服务器默认使用100,这会导致你的错误。 –