我无意中在一个包含一个函数的脚本中使用了一些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()
Run Code Online (Sandbox Code Playgroud)
在SQL2008实例上,这将返回2.
在SQL2005实例上,它建议"无法为本地变量分配默认值".
但是,在SQL2008 R2实例上运行的兼容级别设置的SQL 2005数据库上,代码运行愉快并返回2.
我的问题出现了,因为我在SQL2008R2实例上进行开发,并且我假设将目标数据库的兼容级别设置为SQL Server 2005会标记任何无效的T-SQL,尽管这不会发生,或者至少我找不到任何内容防止它发生.
有人知道如何防止这种情况发生吗?我已经进行了各种搜索但找不到方法,这对我来说感觉像是一个错误,或者我总是需要在我将部署到的最低SQL版本上进行开发?