gpt4 book ai didi

sql-server-2005 - SQL Server 2008 T-SQL 功能不尊重兼容性级别

转载 作者:行者123 更新时间:2023-12-01 09:05:50 25 4
gpt4 key购买 nike

我无意中在一个脚本中使用了几个 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 版本上进行开发?

最佳答案

这是正确的。

兼容性级别并不意味着“完全像旧版本一样运行”
这意味着“在我修复代码时减少中断”。

永远不要假设:检查。这就是 ALTER DATABASE says on MSDN说(我的粗体字):

Compatibility level provides only partial backward compatibility with earlier versions of SQL Server. Use compatibility level as an interim migration aid to work around version differences in the behaviors that are controlled by the relevant compatibility-level setting. If existing SQL Server applications are affected by behavioral differences in SQL Server 2008, convert the application to work properly

如果您的目标是 SQL Server 2005,请在 SQL Server 2005 上开发。请参阅 developing SQL 2005 application using SQL 2008 server

关于sql-server-2005 - SQL Server 2008 T-SQL 功能不尊重兼容性级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7877582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com