对 SQL Server 对象和版本的 DAC 支持

(DAC) 的数据层应用程序支持最常用的数据库引擎对象。

本主题内容

支持的 SQL Server 对象

当编写或编辑数据层应用程序时,只能在其中指定支持的对象。 对于包含在 DAC 中不支持的对象的现有数据库,无法从其提取、注册或导入 DAC。 SQL Server 2014 支持 DAC 中的以下对象。

DATABASE ROLE FUNCTION:内联表值
FUNCTION:多语句表值 FUNCTION:标量
INDEX:聚集 INDEX:非聚集
INDEX:特殊 INDEX:唯一
LOGIN 权限
角色成员资格 SCHEMA
统计信息 STORED PROCEDURE:Transact-SQL
同义词 TABLE:检查约束
TABLE:排序规则 TABLE:列,包括计算列
TABLE:约束,默认值 TABLE:约束,外键
TABLE:约束,索引 TABLE:约束,主键
TABLE:约束,唯一 TRIGGER:DML
类型:HIERARCHYID、GEOMETRY、GEOGRAPHY TYPE:用户定义数据类型
TYPE:用户定义表类型 USER
VIEW

各 SQL Server 版本的数据层应用程序支持

SQL Server版本对 DAC 操作具有不同级别的支持。 SQL Server 版本支持的所有 DAC 操作都受该版本的所有版本支持。

数据库引擎实例支持以下 DAC 操作:

  • 所有受支持的 SQL Server 版本都支持导出和提取。

  • Azure SQL Database 以及 SQL Server 2014、SQL Server 2012 和 SQL Server 2008 R2 的所有版本都支持所有操作。

  • SQL Server 2008 Service Pack 2 (SP2) 或更高版本以及 SQL Server 2005 SP4 或更高版本支持所有操作。

DAC Framework 包含用于生成和处理 DAC 包和导出文件的客户端工具。 以下产品包括 DAC Framework

  • SQL Server 2014 和 SQL Server 2012 包括支持所有 DAC 操作的 DAC Framework 3.0。

  • SQL Server 2008 R2 SP1 和 Visual Studio 2010 SP1 包括 DAC Framework 1.1,它支持除导出和导入之外的所有 DAC 操作。

  • SQL Server 2008 R2 和 Visual Studio 2010 包括 DAC Framework 1.0,它支持除导出、导入和就地升级之外的所有 DAC 操作。

  • 来自 SQL Server 或 Visual Studio 的早期版本的客户端工具不支持 DAC 操作。

使用某一 DAC Framework 版本生成的 DAC 包或导出文件无法由早期版本的 DAC Framework 处理。 例如,无法使用 SQL Server 2008 R2 客户端工具部署使用 SQL Server 2014 客户端工具提取的 DAC 包。

使用某一 DAC Framework 版本生成的 DAC 包或导出文件可由任何更高版本的 DAC Framework 处理。 例如,可以使用 SQL Server 2008 R2 SP1 或更高版本的客户端工具部署使用 SQL Server 2008 R2 客户端工具提取的 DAC 包。

数据部署限制

请注意 SQL Server 2012 SP1 中 DAC Framework 数据部署引擎的以下这些保真度限制。 这些限制适用于以下 DAC Framework 操作:部署或发布 .dacpac 文件,以及导入 .bacpac 文件。

  1. sql_variant 列中特定条件和基类型的元数据丢失。 在受影响的情况下,你将看到一条警告,其中包含以下消息:在 由 DAC Framework 部署时,不会保留sql_variant列中使用的某些数据类型上的某些属性。

    • MONEY、SMALLMONEY、NUMERIC、DECIMAL 基类型:不保留精度。

      • 精度为 38 的 DECIMAL/NUMERIC 基类型:“TotalBytes”sql_variant元数据始终设置为 21。
    • 所有文本基类型:数据库默认排序规则适用于所有文本。

    • BINARY 基类型:不保留最大长度属性。

    • TIME、DATETIMEOFFSET 基类型:精度始终设置为 7。

  2. sql_variant 列中的数据丢失。 在受影响的情况下,你将看到一条警告,其中包含以下消息: 当 DAC Framework 部署规模大于 3 的 sql_variant DATETIME2 列中的值时,将会丢失数据。在部署期间,DATETIME2 值限制为等于 3 的缩放比例。

    • 规模大于 3 的 DATETIME2 基类型:缩放比例限制为等于 3。
  3. 针对 sql_variant 列中以下条件的部署操作失败。 在受影响的情况下,你将看到一个对话框,其中包含以下消息: 由于 DAC 框架中的数据限制,操作失败。

    • DATETIME2、SMALLDATETIME 和 DATE 基类型:如果值超出 DATETIME 范围 -例如,年份小于 1753。

    • DECIMAL,NUMERIC 基类型:当值的精度大于 28 时。

有关部署操作的其他注意事项

请注意以下有关 DAC Framework 数据部署操作的注意事项:

  • 提取/导出 - 在使用 DAC Framework 从数据库创建包的操作(例如,提取 .dacpac 文件)上,导出 .bacpac 文件时,这些限制不适用。 该包中的数据是源数据库中数据的完全保真表示形式。 如果该包中存在其中任意条件,则提取/导出日志将包含通过上述消息所提供问题的摘要。 这将向用户警告他们所创建的包存在潜在数据部署问题。 用户还将在日志中看到以下摘要消息: 这些限制不会影响 DAC Framework 创建的 DAC 包中存储的数据类型和值的保真度;它们仅适用于将 DAC 包部署到数据库所产生的数据类型和值。有关受影响的数据以及如何解决此限制的详细信息,请参阅本主题

  • 部署/发布/导入 - 对于使用 DAC Framework 将包部署到数据库的操作(例如,部署或发布 .dacpac 文件,以及导入 .bacpac 文件),这些限制适用。 目标数据库中生成的数据不能包含包中数据的完全保真表示形式。 部署/导入日志将对出现问题的每个实例都显示一条上述消息。 操作将因错误而被阻止 - 请参阅上述类别 3 - 但将继续显示其他警告。

    有关此情况下受影响的数据以及如何在部署/发布/导入操作中绕开此限制的详细信息,请参阅 此主题

  • 解决方法 - 提取和导出操作会将全保真 BCP 数据文件写入 .dacpac 或 .bacpac 文件中。 若要避免限制,请使用 SQL Server BCP.exe 命令行实用工具将完全保真数据从 DAC 包部署到目标数据库。

另请参阅

数据层应用程序