我无意中在一个脚本中使用了几个 SQL Server 2008 T-SQL 功能,该脚本包含一个将部署到众多客户数据库的函数,其中一些将是 SQL 2005。
违规言论的示例:
create function dbo.fnThisWontWorkOnSQL2005
()
returns varchar(max)
as
begin
declare @intCounter int = 2
return @intCounter
end
select dbo.fnThisWontWorkOnSQL2005()
在 SQL2008 实例上,这将返回 2。
在 SQL2005 实例上,这建议“无法为局部变量分配默认值”。
但是,在 SQL2008 R2 实例上运行的兼容性级别设置的 SQL 2005 数据库上,代码运行良好并返回 2。
当我在 SQL2008R2 实例上进行开发时,我的问题出现了,我假设将目标数据库的兼容性级别设置为 SQL Server 2005 会标记任何无效的 T-SQL,尽管这种情况不会发生,或者至少我找不到任何可以解决的问题。防止它发生。
有谁知道有什么方法可以防止这种情况发生吗?我进行了各种搜索,但找不到方法,对我来说这感觉像是一个错误,或者我是否总是需要在要部署到的最低 SQL 版本上进行开发?
这是对的。
兼容性级别并不意味着“完全像旧版本一样运行”
这意味着“在修复代码时减少中断次数”。
永远不要假设:检查。这是什么MSDN 上的 ALTER DATABASE 说 http://msdn.microsoft.com/en-us/library/bb510680.aspx说(我的粗体):
兼容性级别仅提供partial向后兼容早期版本的 SQL Server。使用兼容性级别作为interim迁移有助于解决由相关兼容性级别设置控制的行为的版本差异。如果现有 SQL Server 应用程序受到 SQL Server 2008 中行为差异的影响,转换应用程序正常工作
如果您的目标是 SQL Server 2005,请在 SQL Server 2005 上进行开发。请参阅使用 SQL 2008 服务器开发 SQL 2005 应用程序 https://stackoverflow.com/q/7803978/27535 too
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)