如何更改目标平台和发布数据库项目

 

您可以将 SQL Server (SSDT) 数据库项目的目标 SQL Server Data Tools 版本更改为任何支持的 SQL Server 实例(SQL Server 2005、2008、2008 R2、Microsoft SQL Server 2012 或 SQL Azure)。通过这样做,您可以针对一个项目进行数据库开发,但在需要时将其发布到多种不同风格的 SQL Server 实例中。

SSDT 还通过识别您的目标平台并且自动检测出您的代码中的任何错误(例如,在您为将要发布到 SQL Azure 的项目使用不支持的功能时),对此任务进行简化。

警告

以下过程将使用在连接的数据库开发面向项目的脱机数据库开发这两节中的之前的过程中创建的实体。

更改项目的目标平台

  1. 在**“解决方案资源管理器”中右键单击您的项目并选择“属性”。单击左侧的“项目设置”选项卡以便访问“项目设置”**属性页。

  2. 此页中的**“目标平台”**下拉列表包含某一数据库项目可发布到的所有支持的 SQL Server 平台。为此过程,请选择 SQL Azure

在编辑脚本时使用平台验证

  1. 在“解决方案资源管理器”中右键单击 Products 表,然后选择**“查看代码”**以便在 Transact-SQL 编辑器中打开它。

  2. 将 ON [PRIMARY] 追加到 CREATE TABLE 语句的末尾。

  3. 请注意,以下错误将出现在**“错误列表”**窗格中:SQL70015: 在 SQL Azure 中不支持“文件组引用和分区方案”。

    SSDT 将基于目标平台自动验证您的脚本。在这种情况下,因为 SQL Azure 不支持文件组,所以 SSDT 将返回错误。有关 SQL Azure 中不支持的 Transact-SQL 语句,请参阅部分支持的 Transact-SQL 语句 (Windows Azure SQL Database)

  4. 删除 ON 子句。请注意,该错误将立即从**“错误列表”**中消失。

发布数据库项目

  1. 如果您有权访问 SQL Azure 实例,则可以跳到下一步。否则,在**“解决方案资源管理器”中右键单击 TradeDev 项目,然后选择“属性”以便访问“项目设置”属性页。使用“目标平台”**下拉列表选择您想要将项目发布到的 SQL Server 平台。

  2. 在**“解决方案资源管理器”中右键单击 TradeDev 项目,然后选择“发布”。SSDT 将开始生成您的项目。如果没有生成错误,“发布数据库”**对话框将出现。

  3. 在**“发布数据库”对话框中,单击“编辑”**以编辑目标数据库连接。

  4. 在**“连接属性”对话框中,输入您的 SQL Server 实例名称和用于身份验证的凭据。在“连接到数据库”**中,输入 NewTrade。这将尝试将您的数据库项目发布到新数据库。您也可以选择要发布到的现有数据库。例如,如果您选择现有的 TradeDev 数据库,然后您在脱机 TradeDev 项目中对这些对象已在进行的所有更改(作为脚本)将传播到实时 TradeDev 数据库中。

    如果您有权对想要发布到的数据库进行任何更改,则按下**“发布”按钮。但是,如果您对生产数据库没有写访问权限,则可以单击“生成脚本”**按钮以便生成一个 Transact-SQL 发布脚本,然后可以将该脚本交给某一 DBA。然后,该 DBA 可以运行该脚本以更新生产服务器,以便其架构与数据库项目同步。

  5. “数据工具操作”窗口将显示发布操作的进度,并在出现任何错误时通知你。在此新窗口中,您还可以根据需要选择查看部署预览、生成的脚本或完整发布结果。

  6. 您还可以将发布设置保存到某一配置文件中,以便为将来的发布操作重复使用相同的设置。为此,在**“发布数据库”对话框中单击“将配置文件另存为”按钮。在将来,您可以在想要重新加载现有设置时单击“加载配置文件”**按钮。

  7. 请注意**“数据工具操作”窗口中的消息。单击“创建发布预览…”右侧的“视图预览”链接。这将打开部署预览报表。如果您的项目的目标平台并不与项目发布到的数据库服务器完全相同,则 SSDT 将在报表中发出警告。例如,如果您的项目的目标平台是 Microsoft SQL Server 2012 并且您在尝试将该项目发布到某一 SQL Server 2008 R2 服务器实例,则会在“输出”**窗口中将看到以下警告:

    将 Microsoft SQL Server 2012 指定为目标平台的项目可能遇到与 SQL Server 2008 的兼容问题

    如果此类项目包含在 Microsoft SQL Server 2012 中引入的实体(例如 Sequence 对象),则该发布操作将失败。

    如果对象谓词对新创建的全文索引使用 CONTAINSFREETEXT 且使用事务脚本,则部署将失败。如果在部署期间启用包含事务脚本的选项,则当在部署脚本结尾在事务外定义全文索引时在事务内定义过程和视图。由于脚本中的这一顺序,使用 CONTAINS 或 FREETEXT 的过程或视图将不会针对全文索引进行解析,从而导致部署错误。