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

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

本主题内容

  • 支持的 SQL Server 对象

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

  • 数据部署限制

  • 针对部署操作的其他注意事项

支持的 SQL Server 对象

当编写或编辑数据层应用程序时,只能在其中指定支持的对象。对于包含在 DAC 中不支持的对象的现有数据库,无法从其提取、注册或导入 DAC。SQL Server 2012 支持 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 版本都支持导出和提取。

  • 在 Windows Azure SQL Database 和所有版本的 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 2012 包括 DAC Framework 3.0,它支持所有 DAC 操作。

  • 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 2012 客户端工具提取的 DAC 包无法使用 SQL Server 2008 R2 客户端工具进行部署。

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

数据部署限制

请注意 SQL Server 2012 PCU1 的 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 部署 sql_variant DATETIME2 列中小数位数大于 3 的值时,将导致数据丢失。在部署过程中,DATETIME2 值限制为等于 3 的小数位数。

    • 小数位数大于 3 的 DATETIME2 基类型:小数位数限制为等于 3。
  3. 在以下情况下,在 sql_variant 列内部署操作将失败: 在受影响的情况下,将会看到含以下消息的对话框:操作由于 DAC Framework 中的数据限制而失败。

    • 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 包部署到目标数据库中。

请参阅

概念

数据层应用程序