【发布时间】:2011-10-24 14:55:51
【问题描述】:
我无意中在一个脚本中使用了几个 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 版本上进行开发?
【问题讨论】:
-
仅供参考:“delighters”不是正确的词:我猜你的意思是新的“功能”
-
我只在technet.microsoft.com/en-us/library/cc721270%28SQL.100%29.aspx 的 Microsoft 文章中发现了这个名字,他们称之为 Transact-SQL Delighters Transact-SQL 的喜悦是小的增强,在很大程度上有助于提升编程体验更方便。本节介绍以下 Transact-SQL 的精彩内容:声明和初始化变量、复合赋值运算符、通过 VALUES 子句支持表值构造函数,以及增强的 CONVERT 函数
-
由非英语母语人士(Itzik 是以色列人)撰写。我会改写:这个词有微妙的暗示,不适合公共论坛
标签: sql-server-2005 tsql sql-server-2008