SQL Server 2014 中数据库引擎功能的重大更改

本主题介绍 SQL Server 2014 数据库引擎和早期版本的 SQL Server 中的中断性变更。 这些更改可能导致基于 SQL Server的早期版本的应用程序、脚本或功能无法继续使用。 在进行升级时可能会遇到这些问题。 有关详细信息,请参阅 Use Upgrade Advisor to Prepare for Upgrades

SQL Server 2014 中的重大更改

没有新问题。

SQL Server 2012 中的重大更改

Transact-SQL

功能 说明
从名为 NEXT 的列或表中进行选择 序列使用 ANSI 标准 NEXT VALUE FOR 函数。 如果表或列名为 NEXT,且表或列的别名为 VALUE,并且省略 ANSI 标准 AS,则生成的语句可能会导致错误。 若要解决这个问题,请包括 ANSI 标准 AS 关键字。 例如,SELECT NEXT VALUE FROM Table 应被重写为 SELECT NEXT AS VALUE FROM TableSELECT Col1 FROM NEXT VALUE 应被重写为 SELECT Col1 FROM NEXT AS VALUE
PIVOT 运算符 当数据库兼容性级别设置为 110 时,不允许在递归公用表表达式 (CTE) 查询中使用 PIVOT 运算符。 重写该查询,或将兼容性级别设置为 100 或更低。 当每个分组有多个行时,在递归 CTE 查询中使用 PIVOT 会产生不正确的结果。
sp_setapprole 和 sp_unsetapprole OUTPUT 的 cookie sp_setapprole 参数当前记载为 varbinary(8000),这是正确的最大长度。 但是,当前实现返回 varbinary(50)。 应用程序应继续保留 varbinary(8000),以便当 cookie 在将来的版本中返回大小增量时,应用程序可继续正确运行。 有关详细信息,请参阅 sp_setapprole (Transact-SQL)
EXECUTE AS EXECUTE AS 的 cookie OUTPUT 参数当前记载为 varbinary(8000),这是正确的最大长度。 但是,当前实现返回 varbinary(100)。 应用程序应继续保留 varbinary(8000),以便当 cookie 在将来的版本中返回大小增量时,应用程序可继续正确运行。 有关详细信息,请参阅 EXECUTE AS (Transact-SQL)
sys.fn_get_audit_file 函数 添加了另外两列 (user_defined_event_iduser_defined_information) ,以支持用户定义的审核事件。 不按名称选择列的应用程序可能会返回比预期更多的列。 请按名称选择列,或调整应用程序以接受这些额外的列。
WITHIN 保留关键字 WITHIN 现在是保留关键字。 引用名为“within”的对象或列将失败。 重命名对象或列,或通过使用括号或引号来分隔名称。 例如 SELECT * FROM [within]
对类型为 timedatetime2 的计算列的 CAST 和 CONVERT 操作 在早期版本的 SQL Server 中,对 timedatetime2 数据类型执行 CAST 和 CONVERT 操作的默认样式为 121,除非在计算列表达式中使用任一类型。 对于计算列,默认样式为 0。 当创建用于涉及自动参数化的查询中或约束定义中的计算列时,此行为会影响计算列。

兼容性级别为 110 时,对 timedatetime2 数据类型的 CAST 和 CONVERT 操作的默认样式始终为 121。 如果您的查询依赖旧行为,请使用低于 110 的兼容性级别或在受影响的查询中显式指定 0 样式。

将数据库升级到兼容性级别 110 将不更改已存储到磁盘的用户数据。 您必须相应手动更正此数据。 例如,如果您使用了 SELECT INTO 来从包含上述计算列表达式的源创建表,将存储数据(使用样式 0)而非存储计算列定义本身。 您需要手动更新此数据,以匹配样式 121。
ALTER TABLE ALTER TABLE 语句只允许两部分的表名称 (schema.object)。 现在,使用以下格式指定表名在编译时失败,并出现错误 117:

server.database.schema.table

.database.schema.table

..schema.table

在早期版本中指定格式 server.database.schema.table 会返回错误 4902。 指定格式 .database.schema.table 或 ..schema.table 则会成功。 要解决此问题,请不要使用 4 部分的前缀。
浏览元数据 使用 FOR BROWSE 或 SET NO_BROWSETABLE ON 查询视图时,现在会返回视图的元数据而非基础对象的元数据。 此行为现在匹配浏览元数据的其他方法。
SOUNDEX 数据库兼容级别为 110 时,SOUNDEX 函数实现的新规则可能导致由该函数计算的值不同于更低兼容级别时计算的值。 在升级到兼容性级别 110 后,可能需要重新生成使用 SOUNDEX 函数的索引、堆或 CHECK 约束。 有关详细信息,请参阅 SOUNDEX (Transact-SQL)
失败的 DML 语句的行计数消息 在 SQL Server 2012 中,当 DML 语句失败时,数据库引擎会一致地将 RowCount: 0 的 TDS DONE 令牌发送到客户端。 在早期版本的 SQL Server 中,当失败的 DML 语句包含在 TRY-CATCH 块中并且由数据库引擎自动参数化,或者 TRY-CATCH 块与失败语句不在同一级别时,会向客户端发送错误值 -1。 例如,如果 TRY-CATCH 块调用存储过程且该过程中的 DML 语句失败,客户端将错误地收到 -1 值。

依赖这种不正确行为的应用程序将失败。
SERVERPROPERTY ('Edition') 已安装 SQL Server 2012 实例的产品版本。 使用该属性的值确定已安装的产品支持的功能和限制(如最大 CPU 数)。

根据已安装的企业版,这可以返回“Enterprise Edition”或“Enterprise Edition:基于核心的许可”。 企业版根据单个 SQL Server 实例的最大计算容量进行区分。 有关 SQL Server 2012 中的计算容量限制的详细信息,请参阅按版本SQL Server的计算容量限制
CREATE LOGIN 密码' HASHEDCREATE LOGIN WITH PASSWORD = '选项不能与SQL Server 7 或更早版本创建的哈希一起使用。
的 CAST 和 CONVERT 转换 在从日期和数据类型转换为 datetimeoffset 时,只支持样式 0 或 1。 所有其他转换样式均返回错误 9809。 例如,下面的代码将返回错误 9809。

SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107);

动态管理视图

视图 说明
sys.dm_exec_requests 该命令列从 nvarchar(16) 更改为 nvarchar(32)
sys.dm_os_memory_cache_counters 以下列已重命名:

single_pages_kb现在为:
pages_kb

multi_pages_kb
现在为:pages_in_use_kb
sys.dm_os_memory_cache_entries 列pages_allocated_count列已重命名为pages_kb。
sys.dm_os_memory_clerks 已删除列multi_pages_kb。

列single_pages_kb列已重命名pages_kb。
sys.dm_os_memory_nodes 以下列已重命名:

single_pages_kb现在为:
pages_kb

multi_pages_kb现在为:
foreign_committed_kb
sys.dm_os_memory_objects 以下列已重命名。

pages_allocated_count现在为:
pages_in_bytes

max_pages_allocated_count现在为:max_pages_in_bytes
sys.dm_os_sys_info 以下列已重命名:

physical_memory_in_bytes现在为:
physical_memory_kb

bpool_commit_target现在为:
committed_target_kb

bpool_visible现在为:
visible_target_kb

virtual_memory_in_bytes现在为:
virtual_memory_kb

bpool_commited现在为:
committed_kb
sys.dm_os_workers 区域设置列已删除。

目录视图

视图 说明
sys.data_spaces

sys.partition_schemes

sys.filegroups

sys.partition_functions
已将新列 is_system 添加到 sys.data_spaces 和 sys.partition_functions。 (sys.partition_schemes 和 sys.filegroups 将继承 sys.data_spaces 的列。)

此列中的值 1 指示该对象用于全文检索片段。

在 sys.partition_functions、sys.partition_schemes 和 sys.filegroups 中,新列不是最后一列。 请修改依赖于从这些目录视图中返回的列顺序的现有查询。

SQL CLR 数据类型(geometry、geography 和 hierarchyid)

包含空间数据类型和 hierarchyid 类型的程序集 Microsoft.SqlServer.Types.dll已从版本 10.0 升级到版本 11.0。 满足以下条件时,引用此程序集的自定义应用程序可能失败:

  • 将自定义应用程序从安装了 SQL Server 2008 R2 的计算机移动到仅安装了 SQL Server 2014 的计算机时,应用程序将失败,因为引用的 SqlTypes 程序集版本 10.0 不存在。 您可能会看到此错误消息:"Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified."

  • 引用 SqlTypes 程序集版本 11.0 并且还安装了版本 10.0 时,可能会看到以下错误消息: "System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'."

  • 从面向 .NET 3.5、4 或 4.5 的自定义应用程序引用 SqlTypes 程序集版本 11.0 时,应用程序将失败,因为 SqlClient 按设计加载程序集的版本 10.0。 当应用程序调用以下方法之一时,将出现此失败:

    • GetValue 类的 SqlDataReader 方法

    • GetValues 类的 SqlDataReader 方法

    • SqlDataReader 类的方括号索引运算符 []

    • ExecuteScalar 类的 SqlCommand 方法

您可以使用以下方法之一来解决此问题:

  • 可以通过调用 GetSqlBytes 方法(而不是上面列出的 Get 方法)在代码中解决此问题,以检索 CLR SQL Server系统类型,如以下示例所示:

    string query = "SELECT [SpatialColumn] FROM [SpatialTable]";  
          using (SqlConnection conn = new SqlConnection("..."))  
          {  
                SqlCommand cmd = new SqlCommand(query, conn);  
    
                conn.Open();  
                SqlDataReader reader = cmd.ExecuteReader();  
    
                while (reader.Read())  
                {  
                      // In version 11.0 only  
                      SqlGeometry g =   
    SqlGeometry.Deserialize(reader.GetSqlBytes(0));  
    
                      // In version 10.0 or 11.0  
                      SqlGeometry g2 = new SqlGeometry();  
                      g.Read(new BinaryReader(reader.GetSqlBytes(0).Stream));  
                }  
          }  
    
  • 您可以通过在应用程序配置文件中使用程序集重定向来解决此问题,如以下示例中所示:

    <runtime>  
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
        ...  
        <dependentAssembly>  
            <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />  
            <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />  
        </dependentAssembly>  
        ...  
    </assemblyBinding>  
    <runtime>  
    
  • 您可以通过为“类型系统版本”属性指定值“SQL Server 2012”以强制 SqlClient 加载程序集的版本 11.0,解决此问题。 此连接字符串属性仅在 .NET 4.5 和更高版本中使用。

  • 标记必须包装在 标记下。

对 AWE 的支持

32 位地址窗口化扩展插件 (AWE) 已不受支持。 这可能会导致在 32 位操作系统上性能下降。 对于占用大量内存的安装,请迁移到 64 位操作系统。

XQuery 函数可识别代理项

XQuery 函数和运算符的 W3C 建议要求它们对代理项对进行计数,该代理项对用 UTF-16 编码将大范围 Unicode 字符表示单个符号。 但是,在 2012 SQL Server 之前的 SQL Server 版本中,字符串函数无法将代理项对识别为单个字符。 某些字符串操作(如字符串长度计算和子字符串提取)返回了不正确的结果。 SQL Server 2012 现在完全支持 UTF-16 和代理项对的正确处理。

SQL Server 中的 XML 数据类型仅允许格式正确的代理项对。 但在某些情况下,一些函数仍会返回未定义的结果或意外结果,这是因为可能会将无效的或部分代理项对作为字符串值传递给 XQuery 函数。 在 SQL Server 中使用 XQuery 时,请考虑以下方法来生成字符串值:

  • 提供常量字符串值作为二进制值。 在使用此方法时,仍可能传递无效的或部分代理项对。

  • 通过提供字符实体来提供常量字符串值。 使用此方法时,仍可能传递无效或不完整代理对。 XQuery 函数需要高级字符的单字符实体。 如果提供代理项对字符的字符实体,这些函数将引发错误。

  • 使用 sql:columnsql:variable 导入外部值。 在使用这些方法时,仍可能引入无效的或部分代理项对。

受影响的 XQuery 函数和运算符

以下 XQuery 函数和运算符现在在 SQL Server 2012 中正确处理 UTF-16 代理项对:

  • fn:string-length。 但是,如果将无效或部分代理项对作为参数传递,则 字符串长度 的行为是不确定的。

  • fn:substring

  • fn:contains。 但是,如果将部分代理项对作为值传递, 则 contains 可能会返回意外结果,因为它可能会找到格式正确的代理项对中包含的部分代理项对。

  • fn:concat。 但是,如果将部分代理项对作为值传递, concat 可能会生成不正确的代理项对或部分代理项对。

  • 比较运算符和 order by 子句。 比较运算符包括 +、、、、=、>、eqltgtle、 和 。ge<><

对系统过程的分布式查询调用

从一个 SQL Server 2012 服务器调用另一个服务器时,通过对某些系统过程的分布式查询调用OPENQUERY将失败。 当数据库引擎无法发现过程的元数据时,就会发生这种情况。 例如 SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo')

隔离级别和 sp_reset_connection

连接用隔离级别由客户端驱动程序按照如下方法处理:

  • 所有的本机驱动程序(SNAC、MDAC、ODBC)都根据 sp_reset_connection 设置隔离级别(基于应用设置)。

  • 对于 ADO.NET,你实质上会获得一个随机的隔离级别,这取决于你从池中获取的连接(以及应用程序是否使用不同的隔离级别)。 由于 ADO.NET 池可在内部以透明方式回收连接,你无法预测将从池中得到什么结果。

  • 对于 JDBC 驱动程序,你获得与 ADO.NET 相同的行为

    打开连接以获取所需之后,应用程序必须始终显式设置隔离级别。

    JDBC 连接可以共用,从而应用程序可获取一个随机隔离级别但并不知情。

若要保留向后兼容性,这种新行为仅适用于以 TDS 7.4 开头的较新的客户端。

Backward Compatibility

新行为取决于兼容性级别

仅当数据库兼容性级别为 110 或更高时,以下函数和运算符才具有上述新行为:

  • fn:contains

  • fn:concat

  • 比较运算符和 order by 子句

新行为取决于函数的默认命名空间 URI

仅当默认命名空间 URI 对应于最终建议中的命名空间(即 )时, http://www.w3.org/2005/xpath-functions以下函数才演示上述新行为。 当兼容级别为 110 或更高时,默认情况下,SQL Server 2012 会将默认函数命名空间绑定到此命名空间。 但是,无论兼容性级别如何,使用此命名空间时,这些函数都将具有新行为。

  • fn:string-length

  • fn:substring

SQL Server 2008/SQL Server 2008 R2 中的重大更改

本节包含 SQL Server 2008 中引入的重大更改。 SQL Server 2008 R2 中未引入任何更改。

排序规则

功能 说明
新排序规则 SQL Server 2008 引入了与 Windows Server 2008 提供的排序规则完全一致的新排序规则。 这 80 个新排序规则以 *_100 版本引用表示,它们的语言准确性得到了改善。 如果为服务器或数据库选择新排序规则,请注意,具有旧客户端驱动程序的客户端可能无法识别新排序规则。 未被识别的排序规则可能会导致应用程序返回错误并失败。 请考虑以下解决方案:

升级客户端操作系统,以更新基础系统排序规则。

如果客户端上安装了数据库客户端软件,则可以考虑对数据库客户端软件应用服务更新。

选择一个现有排序规则,该排序规则会映射到客户端上的一个代码页。

公共语言运行时 (CLR)

功能 说明
CLR 程序集 将数据库升级到 SQL Server 2008 时,Microsoft.SqlServer.Types将自动安装支持新数据类型的程序集。 升级顾问规则将检测存在名称冲突的任何用户类型或程序集。 升级顾问将建议您重命名所有冲突的程序集,并重命名所有冲突的类型或在代码中使用由两部分组成的名称来引用该预先存在的用户类型。

如果数据库升级检测到某个用户程序集具有冲突名称,它将自动重命名该程序集,并将数据库置于可疑模式下。

如果在升级过程中存在具有冲突名称的用户类型,则不会采取特殊步骤。 升级后,旧的用户类型和新的系统类型将同时存在。 用户类型将只能通过由两部分组成的名称使用。
CLR 程序集 SQL Server 2008 安装 .NET Framework 3.5 SP1,它更新全局程序集缓存 (GAC) 中的库。 如果在SQL Server数据库中注册了不受支持的库,SQL Server应用程序可能会在升级到 SQL Server 2008 后停止工作。 这是因为在 GAC 中维护或升级库不会更新SQL Server内的程序集。 如果程序集同时存在于 SQL Server 数据库和 GAC 中,则程序集的两个副本必须完全匹配。 如果不匹配,则SQL Server CLR 集成使用程序集时将发生错误。 有关详细信息,请参阅支持的.NET Framework库

升级数据库后,使用 ALTER ASSEMBLY 语句维护或升级SQL Server数据库中程序集的副本。 有关详细信息,请参阅 知识库文章 949080

若要检测是否在应用程序中使用了任何不支持的 .NET Framework 库,请在数据库中运行以下查询。

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';
CLR 例程 在 CLR 用户定义函数、用户定义的聚合或用户定义类型中使用模拟 (UDT) 可能会导致应用程序在升级到 SQL Server 2008 后失败并出现错误 6522。 以下方案在 2005 SQL Server成功,但在 2008 SQL Server失败。 针对每种情况提供了相应的解决方案。

使用模拟的 CLR 用户定义函数、用户定义聚合或 UDT 方法具有类型nvarchar(max)为 、、varchar(max)varbinary(max)ntexttextimage或大型 UDT 的参数,并且该方法上没有 DataAccessKind.Read 属性。 若要解决此问题,请在 方法上添加 DataAccessKind.Read 属性,重新编译程序集,然后重新部署例程和程序集。

具有执行模拟的 Init 方法的 CLR 表值函数。 若要解决此问题,请在 方法上添加 DataAccessKind.Read 属性,重新编译程序集,然后重新部署例程和程序集。

具有执行模拟的 FillRow 方法的 CLR 表值函数。 若要解决此问题,请从 FillRow 方法中删除模拟。 请勿使用 FillRow 方法访问外部资源。 相反,请从 Init 方法访问外部资源。

动态管理视图

视图 说明
sys.dm_os_sys_info 删除了 cpu_ticks_in_ms 和 sqlserver_start_time_cpu_ticks 列。
sys.dm_exec_query_resource_semaphoressys.dm_exec_query_memory_grants resource_semaphore_id列不是 2008 SQL Server中的唯一 ID。 此更改会对故障排除查询执行造成影响。 有关详细信息,请参阅 sys.dm_exec_query_resource_semaphores (Transact-SQL)

错误和事件

功能 说明
登录错误 在 SQL Server 2005 中,当使用 SQL 登录名连接到配置为仅使用 Windows 身份验证的服务器时,将返回错误 18452。 在 SQL Server 2008 中,将改为返回错误 18456。

Showplan

功能 说明
显示计划 XML 架构 新的 SeekPredicateNew 元素将添加到 Showplan XML 架构,并将封闭的 xsd 序列 (SqlPredicatesType) 转换为 <xsd:choice> 项。 一个或多个 SeekPredicateNew 元素现在可能显示在 Showplan XML 中,而不是一个或多个 SeekPredicate 元素。 这两种元素是相互排斥的。 SeekPredicate 在 Showplan XML 架构中维护,以实现向后兼容性;但是,在 SQL Server 2008 中创建的查询计划可能包含 SeekPredicateNew 元素。 如果 SeekPredicate 元素不存在,则预期仅从 ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates 节点检索 SeekPredicate 子级的应用程序可能会失败。 重写应用程序以在此节点中预期 SeekPredicateSeekPredicateNew 元素。 有关更多信息,请参见 。
显示计划 XML 架构 新的 IndexKind 属性将添加到 Showplan XML 架构中的 ObjectType 复杂类型。 针对 SQL Server 2005 架构严格验证SQL Server计划的应用程序将失败。

Transact-SQL

功能 说明
ALTER_AUTHORIZATION_DATABASE DDL 事件 在 2005 SQL Server中,当 DDL 事件ALTER_AUTHORIZATION_DATABASE触发时,如果数据定义语言中安全对象的实体类型为对象,则此事件的 EVENTDATA xml 的 ObjectType 元素中返回值“object”, (DDL) 操作。 在 2008 SQL Server中,将返回实际类型 (,例如“table”或“function”) 。
CONVERT 如果传递到 CONVERT 函数的样式无效,则会在二进制转换为字符或字符转换为二进制时,返回一个错误。 在早期版本的 SQL Server 中,无效样式设置为二进制到字符和字符到二进制转换的默认样式。
对程序集 GRANT/DENY/REVOKE EXECUTE 不能对程序集授予、拒绝或撤消“EXECUTE”权限。 此权限不起任何作用,并且现在会导致一个错误。 可以对引用程序集方法的存储过程或函数授予、拒绝或撤消“EXECUTE”权限。
对系统类型 GRANT/DENY/REVOKE 权限 不能对系统类型授予、拒绝或撤消权限。 在早期版本的 SQL Server 中,这些语句成功,但不起作用。 在 SQL Server 2008 中,返回错误。
GROUP BY GROUP BY 子句在用于分组依据列表的表达式中不能包含子查询。 在早期版本的 SQL Server 中,允许这样做。 在 SQL Server 2008 中,返回错误 144。

例如,以下代码在 SQL Server 2005 中运行成功而在 SQL Server 2008 中运行失败:

DECLARE @Test TABLE(a int NOT NULL);
INSERT INTO @Test SELECT 1 union ALL SELECT 2;
SELECT COUNT(*)
FROM @Test
GROUP BY CASE WHEN a IN (SELECT t.a FROM @Test AS t)
THEN 1 ELSE 0
END;
OUTPUT 子句 为了防止出现不确定的行为,当某个列是通过下列方法之一定义时,OUTPUT 子句不能通过视图或内联表值函数引用该列:

子查询。

执行用户数据访问或系统数据访问(或者被认为执行此类访问)的用户定义函数。

在定义中包含执行用户数据访问或系统数据访问的用户定义函数的计算列。



如果 SQL Server 在 OUTPUT 子句中检测到了此类列,将引发错误 4186。 有关详细信息,请参阅 MSSQLSERVER_4186
OUTPUT INTO 子句 OUTPUT INTO 子句的目标表不能有任何已启用的触发器。
precompute rank 服务器级选项 SQL Server 2008 不支持此选项。 请尽快修改当前使用此功能的应用程序。
READPAST 表提示 您不能在快照隔离下指定 READPAST 提示。

在将 READ_COMMITED_SNAPSHOT 或 ALLOW_SNAPSHOT_ISOLATION 数据库选项设置为 ON 时,将忽略 READPAST 提示。 但是,如果您将 READPAST 提示与 READCOMMITTEDLOCK 相结合,则 READPAST 行为与阻止 READCOMMITTED 提示等效。
sp_helpuser sp_helpuser存储过程的结果集中返回的以下列名称已更改:

GroupName 现在为:
RoleName

Group_name现在为:
Role_name

Group_id现在为:
Role_id

Users_in_group现在为:
Users_in_role
透明数据加密 在 I/O 级别执行透明数据加密 (TDE):页结构在内存中不加密,而仅在将页写入到磁盘后才对页结构进行加密。 数据库文件和日志文件均加密。 当数据库使用 TDE 时,如果第三方应用程序绕过常规SQL Server机制来访问页面 (,例如,直接) 扫描数据或日志文件,则会失败,因为数据在文件中已加密。 此类应用程序可以利用窗口加密 API 开发用于解密SQL Server外部数据的解决方案。

XQuery

功能 说明
Datetime 支持 在 SQL Server 2005 中,数据类型 xs:timexs:datexs:dateTime 没有时区支持。 时区数据会映射到 UTC 时区。 SQL Server 2008 提供符合标准的行为,导致以下更改:

将验证没有时区的值。

将保留提供的时区或缺少的时区。

修改了内部存储表示形式。

增加了存储值的分辨率。

不允许使用负年份。



注意:修改应用程序和 XQuery 表达式以考虑新的类型值。
XQuery 和 Xpath 表达式 在 SQL Server 2005 中,允许在 XQuery 或 XPath 表达式中执行以冒号 (':') 开头的步骤。 例如,下面的语句在路径表达式中包含以冒号开头的名称测试 (CTR02)

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

在 SQL Server 2008 中,不允许使用此用法,因为它不符合 XML 标准。 返回错误 9341。 请删除前导冒号或为名称测试指定一个前缀,例如 (n$/CTR02) 或 (n$/p1:CTR02)。

Connecting

功能 说明
使用 SSL 从SQL Server Native Client进行连接 使用 SQL Server Native Client 进行连接时,使用“SERVER=shortname;强制 ENCRYPTION=true“,其使用者指定完全限定的域名 (FQDN 的) 过去由于验证宽松而连接。 SQL Server 2008 R2 通过为证书实现 FQDN 主题增强安全性。 依赖于已放宽验证的应用程序必须采取以下措施之一:

在连接字符串中使用 FQDN。

-如果在应用程序外部配置了连接字符串的 SERVER 关键字 (keyword) ,则此选项不需要重新编译应用程序。

-此选项不适用于已对其连接字符串进行硬编码的应用程序。

-此选项不适用于使用数据库镜像的应用程序,因为镜像服务器使用简单名称进行答复。
为映射到 FQDN 的短名称添加别名。

-此选项甚至适用于已对其连接字符串进行硬编码的应用程序。

-此选项不适用于使用数据库镜像的应用程序,因为提供程序不会查找收到的故障转移伙伴名称的别名。
为短名称签发一个证书。

-此选项适用于所有应用程序。

SQL Server 2005 中的重大更改

我们会在一组存档网页中累积并保留旧版 Microsoft SQL Server 的文档。 搜索引擎(例如 Bing.com 和 Google.com)不会处理存档网页。 但是,可以在 Docs 早期版本/ 地址中查看这些存档:

这些存档至少包括以下较早版本的相关文档:

  • SQL Server 2014
  • SQL Server 2012
  • SQL Server 2008 R2
  • SQL Server 2008
  • SQL Server 2005

SQL Server 2014 文档已存档,不再由搜索引擎处理。 2014 年的文章现在使用 NOINDEX 和 NOFOLLOW 声明自己。

此处记录了SQL Server的最新版本以及其他最新版本。

另请参阅

SQL Server 2014 中不推荐使用的数据库引擎功能
SQL Server 2014 中数据库引擎功能的行为更改
SQL Server 2014 中已停用的数据库引擎功能
SQL Server 数据库引擎的后向兼容性
ALTER DATABASE Compatibility Level (Transact-SQL)
SQL Server 2014 中管理工具功能的重大更改