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

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

SQL Server 2014 中的中断性变更

没有新问题。

SQL Server 2012 中的中断性变更

Transact-SQL

功能 / 特点 Description
从名为 NEXT 的列或表中进行选择 序列使用 ANSI 标准 NEXT VALUE FOR 函数。 如果表或列名为 NEXT 且表或列别名为 VALUE,并且省略 ANSI 标准 AS,则结果语句可能会导致错误。 若要解决此问题,请包含 ANSI 标准 AS 关键字。 例如, SELECT NEXT VALUE FROM Table 应按原样 SELECT NEXT AS VALUE FROM Table 重写, SELECT Col1 FROM NEXT VALUE 并应重写为 SELECT Col1 FROM NEXT AS VALUE
PIVOT 运算符 当数据库兼容性级别设置为 110 时,不允许在递归公共表表达式 (CTE) 查询中使用 PIVOT 运算符。 重写查询,或将兼容性级别更改为 100 或更低。 在递归 CTE 查询中使用 PIVOT 时,如果每个分组的行数超过一行,则会产生不正确的结果。
sp_setapprole和sp_unsetapprole 当前记录varbinary(8000)sp_setapprole cookie OUTPUT 参数是正确的最大长度。 但是,当前实现返回 varbinary(50)。 应用程序应继续保留 varbinary(8000) ,以便在 Cookie 返回大小在未来版本中增加时应用程序继续正常运行。 有关详细信息,请参阅sp_setapprole(Transact-SQL)。
EXECUTE AS cookie OUTPUT 参数 EXECUTE AS 当前记录 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 在早期版本的 SQL Server 中,除计算列表达式中使用任一类型外,对 CAST 和 CONVERT 操作time的默认样式为 datetime2 121。 对于计算列,默认样式为 0。 当创建用于涉及自动参数化的查询中或约束定义中的计算列时,此行为会影响计算列。

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

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

server.database.schema.table

.database.schema.table

..schema.table

在早期版本中,指定 format 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 语句的行计数消息 在 2012 SQL Server中,数据库引擎会在 DML 语句失败时将 TDS DONE 令牌与 RowCount: 0 一致地发送到客户端。 在早期版本的 SQL Server 中,当 TRY-CATCH 块中包含失败的 DML 语句并且由数据库引擎自动参数化或 TRY-CATCH 块与失败语句不在同一级别时,会将 -1 的值发送到客户端。 例如,如果 TRY-CATCH 块调用存储过程和过程中的 DML 语句失败,客户端将错误地收到 -1 值。

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

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

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

动态管理视图

视图 Description
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 区域设置列已删除。

目录视图

视图 Description
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)

程序集 Microsoft.SqlServer.Types.dll(包含空间数据类型和 hierarchyid 类型)已从版本 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 及更高版本中可用。

  • 标记 assemblyBinding 应包装在 runtime 标记下。

对 AWE 的支持

32 位地址窗口扩展(AWE)支持已停止。 这可能会导致 32 位操作系统的性能降低。 对于使用大量内存的安装,请迁移到 64 位操作系统。

XQuery 函数 Surrogate-Aware

XQuery 函数和运算符的 W3C 建议要求它们计算代理项对,该代理项对将高范围 Unicode 字符表示为 UTF-16 编码中的单个字形。 但是,在 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。 但是,如果将部分代理项对作为值传递, 则包含 可能会返回意外的结果,因为它可能会发现格式正确的代理项对中包含的部分代理项对。

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

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

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

从 2012 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 开始的最新客户端。

向后兼容性

新行为取决于兼容性级别

以下函数和运算符仅当兼容级别为 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 2008R2 中的中断性变更

本部分包含 2008 SQL Server中引入的中断性变更。 SQL Server 2008 R2 中未引入任何更改。

Collations

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

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

如果客户端安装了数据库客户端软件,请考虑将服务更新应用到数据库客户端软件。

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

公共语言运行时 (CLR)

功能 / 特点 Description
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框架库

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

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

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';
CLR 例程 在 CLR 用户定义函数、用户定义的聚合或用户定义类型(UDT)中使用模拟可能会导致应用程序在升级到 2008 SQL Server后失败并出现错误 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 方法访问外部资源。

动态管理视图

视图 Description
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)。

错误和事件

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

显示计划

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

Transact-SQL

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

例如,以下代码将在 2005 SQL Server成功,并在 2008 SQL Server失败。

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 子句的目标表不能有任何已启用的触发器。
预计算排名服务器级别选项 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
透明数据加密 透明数据加密(TDE)在 I/O 级别执行:页面结构在内存中未加密,并且仅在将页面写入磁盘时才加密。 数据库文件和日志文件均已加密。 当数据库使用 TDE 时,绕过用于访问页面的常规SQL Server机制(例如,通过直接扫描数据或日志文件)的第三方应用程序将失败,因为文件中的数据已加密。 此类应用程序可以利用窗口加密 API 开发用于解密SQL Server外部数据的解决方案。

XQuery

功能 / 特点 Description
日期/时间支持 在 SQL Server 2005 中,数据类型xs:timexs:date,并且xs: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。 删除前导冒号或指定名称 test 的前缀-例如(n$/CTR02)或 (n$/p1:CTR02)。

正在连接

功能 / 特点 Description
使用 SSL 从 SQL Server Native Client 进行连接 使用 SQL Server Native Client 进行连接时,使用“SERVER=shortname;”的应用程序FORCE ENCRYPTION=true“,其使用者指定完全限定的域名(FQDN)在过去由于验证宽松而已连接。 SQL Server 2008 R2 通过强制执行证书的 FQDN 主题来提高安全性。 依赖于宽松验证的应用程序必须执行以下操作之一:

在连接字符串中使用 FQDN。

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

-此选项不适用于具有硬编码连接字符串的应用程序。

-此选项不适用于使用数据库镜像的应用程序,因为镜像服务器以简单名称答复。
添加短名称的别名以映射到 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和其他最新版本。

另请参阅

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