SQL Server 2008 T-SQL 功能不考虑兼容性级别

2024-02-17

我无意中在一个脚本中使用了几个 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(使用前将#替换为@)

SQL Server 2008 T-SQL 功能不考虑兼容性级别 的相关文章

  • 在 SQL 中重新排序数据

    我的报告数据结构如下 RecID ReportView1 Name Value Total 1 CURRENT VIEW Test1 10 20 1 PROPOSED VIEW Test11 20 30 1 POTENTIAL SAVING
  • 如何在SQL Server数据库表列中存储图像[重复]

    这个问题在这里已经有答案了 我有一张名为FEMALE在我的数据库中 它有ID as Primary Key 它有一个Image column 我的问题是如何使用 SQL 查询存储图像 尝试一下 insert into tableName I
  • 时间分组的 TSQL 滚动平均值

    这是以下内容的后续内容 TSQL 按 N 秒分组 https stackoverflow com questions 5513176 tsql group by n seconds 我得到了我想要的东西 但没有要求正确的东西 如何获得 1
  • SQL Server 2005 - 字符编码问题

    我正在尝试将此值 llko 存储到 SQL Server 中的列中 该列是 nvarchar 1000 插入语句如下所示 N llko 但里面的数据仍然显示为 a llkoa 关于我可以尝试什么的任何想法 EDIT 我刚刚意识到我已经更改了
  • SQL - 为每条记录调用存储过程

    我正在寻找一种方法来为 select 语句的每条记录调用存储过程 SELECT SomeIds SELECT spro Id FROM SomeTable as spro INNER JOIN Address addr ON addr Id
  • SQL Server 2008:如何使用 powershell 获取“消息”选项卡(在 Management Studio 中)输出

    我在用invoke sqlcmd管理我的数据库 它工作得很好 我将 Management Studio 中 结果 选项卡的输出保存到日志文件中 当我做一个BACKUP DATABASE 输出是在 消息 选项卡上完成的 我想将其保存在日志文件
  • SSRS将参数传递给子报表

    我有 2 个表 它们都有 countyID 列 我有一个主报告 它根据如下查询显示报告 SELECT countyID name address state FROM TableA 我在 TableA 上设置了一个参数 您可以在其中选择名称
  • 是否可以执行具有输出参数的 T-SQL 存储过程,同时忽略 SELECT 语句?

    我正在从另一个存储过程调用一个存储过程 并且我调用的过程有一个输出参数 然后我将输出值传输到局部变量中 这一切都很好 但问题是这个过程还有一个select其中的声明 所以当我exec 该过程的结果将在最终结果集中返回 有没有一种方法可以简单
  • 更新每组单行

    的背景 我有一个临时表 其中包含唯一的 rowID OrderNumber 和 guestCount 等信息 RowID 和 OrderNumber 已存在于该表中 并且我正在运行一个新查询来填充每个 orderNumber 缺少的 gue
  • 在 SSIS 中使用合并任务的指南

    我有一个包含三个字段的表 其中一个是身份字段 我需要从具有其他两个字段的源中添加一些新记录 我正在使用SSIS 我认为我应该使用合并工具 因为其中一个源不在本地数据库中 但是 我对合并工具和正确的过程感到困惑 我有一个源 一个 Oracle
  • 'ExecuteReader 需要一个开放且可用的连接。连接的当前状态是打开'

    用 C 编写的相当大的 Web 应用程序不断抛出 2 个错误 ExecuteReader 需要一个开放且可用的连接 连接的当前状态是打开的 和 阅读器关闭时调用 Read 的尝试无效 这些错误是零星的 过去页面在大约 95 的情况下加载良好
  • 如何获取 dm_exec_sql_text 的参数值

    我正在运行以下语句来查看 sql server 中正在执行哪些查询 select from sys dm exec requests r cross apply sys dm exec sql text r sql handle where
  • sql中的拓扑排序

    我正在解决表中某些对象之间的依赖关系 我必须对对象做一些事情来排序它们的依赖性 例如 第一个对象不依赖于任何对象 第二个和第三个取决于第一个 依此类推 我必须使用拓扑排序 http en wikipedia org wiki Topolog
  • 实体框架 - sql server 表中未设置默认值

    SQL Server 2005 数据库表有一列 createdon 其默认值设置为 getdate 我正在尝试使用实体框架添加记录 createdon 列未更新 我是否错过了实体框架中的任何属性 请提出建议 这是实体框架存在的少数问题之一
  • 如何每行输出 7 条记录,一周中的每一天输出 1 条记录?

    试图在这里节省大量的数据输入 我目前有以下输出 CONTID DESCR 001 Area 1 001 Area 2 001 Area 3 我想要做的是为每个 DESCR 区域 输出 7 条记录 一周中的每一天输出 1 条记录 相应地为 0
  • SQL:删除SQL Server中的重复记录

    我有一个 sql server 数据库 我预先加载了大量数据行 不幸的是 数据库中没有主键 并且表中现在存在重复信息 我不担心没有主键 但我担心数据库中有重复项 有什么想法吗 原谅我是一个sql server新手 嗯 这就是表上应该有主键的
  • 获取每月第二个星期二的日期

    有没有办法使用 T SQL 语法找出每月第二个星期二的日期 例如 三月是十二号 四月是九号 您可以通过此方法查找 2013 年所有 第二个星期二 select dateadd day 8 datediff day 1 dateadd mon
  • 查看与存储过程连接的结果

    我在 SQL Server 中有一个由应用程序使用的现有视图 我需要加入从存储过程返回的表 存储过程会执行很多操作 例如在返回结果之前插入多个 temp 表 我尝试将存储过程转换为表值函数 但是插入 TVF 内的临时表会导致编译错误 我还有
  • T-SQL:检查电子邮件格式

    我有这样的场景 我需要物理数据库中的数据完整性 例如 我有一个变量 email address VARCHAR 200 我想检查一下值是否为 email address是电子邮件格式 有人知道如何检查 T SQL 中的格式吗 非常感谢 我使
  • 无法打开备份设备。操作系统错误5

    下面是我用来备份的查询 创建一个 bak 我的数据库 但是 每当我运行它时 我总是收到此错误消息 消息 3201 16 级 状态 1 第 1 行无法打开备份设备 C Users Me Desktop Backup MyDB Bak 操作系统

随机推荐