我在包含一个函数的脚本中无意中使用了一对SQL Server 2008 T-SQL功能,该功能将部署到众多客户数据库中,其中一些将SQL 2005SQL Server 2008 T-SQL功能不考虑兼容性水平
违规语句的一个例子:
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版本?
仅供参考:“deighters”不是正确的词:我猜你的意思是新的“功能” – gbn
我只在Microsoft网站http://technet.microsoft.com/en-us/library/cc721270找到这个名字%28SQL.100%29.aspx这就是他们所称的 Transact-SQL Delighters Transact-SQL提升程序是一项小的增强,它在很大程度上有助于使编程体验更加方便。本节涵盖以下Transact-SQL提取器:声明和初始化变量,复合赋值运算符,通过VALUES子句提供的表值构造器支持,以及增强的CONVERT函数 –
由非母语英语者(Itzik is Israeli)撰写。我将改述:这个词有微妙的泛音不适合公共论坛 – gbn