演练:部署数据库重构更改

更新:2007 年 11 月

在 Visual Studio Team System Database Edition 中工作时,可更改数据库的脱机表示形式。若要将这些更改提交到活动数据库,必须生成并部署数据库项目。将更改部署到开发数据库、测试数据库或成品数据库的过程很相似。

说明:

各种类型的数据库的部署过程都很相似。但是,执行部署的人可能不尽相同。例如,在某些情况下,只有数据库管理员 (DBA) 具有部署到成品数据库的权限。

在前一个演练 演练:重命名数据库列 中,您创建了一个数据库项目,导入了 Northwind 数据库架构并对一列进行了重命名。在本演练中,您将生成并部署此更改。

先决条件

若要完成本演练,您需要:

生成数据库项目

  1. 打开您在 演练:重命名数据库列 中创建的名为 RefactorNorthwind 的数据库项目。

  2. 在“生成”菜单上,单击“生成解决方案”。

  3. “错误列表”窗口中可能会出现生成错误。例如,如果存储过程在不对列进行限定的情况下选择了一列,并且您重命名了此列,则该名称将不会在存储过程中更新。这种情况会导致生成错误,因为存储过程现在选择了一个不存在的列名称。若要防止这些类型的错误发生,请确保列名称在 Transact-SQL (T-SQL) 代码中是完全限定的。若要修复这些类型的错误,必须手动更新列名称。例如,如果将列从 Orders.ShippedDate 重命名为 Orders.ShippedDateAndTime,必须手动更新存储过程 Sales by Year。将下面的存储过程:

    create procedure "Sales by Year" 
        @Beginning_Date DateTime, @Ending_Date DateTime AS
    SELECT Orders.ShippedDateAndTime, Orders.OrderID, "Order Subtotals".Subtotal, DATENAME(yy, ShippedDate) AS Year
    FROM Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID
    WHERE Orders.ShippedDateAndTime Between @Beginning_Date And @Ending_Date
    

    更改为:

    create procedure "Sales by Year" 
        @Beginning_Date DateTime, @Ending_Date DateTime AS
    SELECT Orders.ShippedDateAndTime, Orders.OrderID, "Order Subtotals".Subtotal, DATENAME(yy, Orders.ShippedDateAndTime) AS Year
    FROM Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID
    WHERE Orders.ShippedDateAndTime Between @Beginning_Date And @Ending_Date
    

设置项目的部署属性

  1. 在“解决方案资源管理器”中,单击数据库项目 RefactorNorthwind。

  2. 在“项目”菜单上,单击“RefactorNorthwind 属性”。

    将显示项目属性。

  3. 单击“生成”选项卡。

  4. 单击标签为“...”的按钮显示“连接属性”对话框。

  5. 设置要使用的数据库的连接属性,然后单击“确定”。

    “目标连接”框用正确的连接字符串填充。

    警告:

    应该针对测试数据库或开发数据库测试此部署。不应针对成品数据库测试此部署。

  6. 在“目标数据库名称”框中键入目标数据库的名称。

    警告:

    默认情况下,“目标数据库名称”框由数据库项目的名称填充。如果数据库项目名称不是目标数据库名称,则必须更改此字段。

  7. 选中“为目标数据库中存在而数据库项目中不存在的对象生成 DROP 语句”复选框。在某些情况下,此复选框非常重要,例如重命名表时。生成的部属脚本将包含一个用于具有旧名称的表的 DROP 语句和一个用于具有新名称的表的 CREATE TABLE 语句。可以清除“为目标数据库中存在而数据库项目中不存在的对象生成 DROP 语句”复选框以防止具有旧名称的表被删除。防止这种情况下的可能的数据丢失有多种方法,这只是其中的一种。有关更多信息,请参见在重命名操作期间保护数据

  8. 在“文件”菜单上,单击“全部保存”。

  9. 在“生成”菜单上,单击“生成解决方案”。

    即会基于刚刚设置的项目属性生成部署脚本。生成状态将显示在“输出”窗口中,最后一行应显示“生成: 1 成功或最新”。

部署数据库项目

  1. 在“文件”菜单上,指向“打开”,然后单击“文件”。

    “打开”对话框随即出现。

  2. 在“文件名”框中,键入下面的地址,然后单击“打开”。

    您的路径\RefactorNorthwind\Sql\RefactoringDeploy.您的服务器.Northwind.sql

  3. 在部署脚本中,找到以下各行:

    DROP TABLE [dbo].[Orders]

    CREATE TABLE [dbo].[Orders]

    这些行对应于您在上一个演练中所做的重构更改。此时,您可以更改部署脚本。例如,可以删除不想部署的 DROP 语句。有关更多信息,请参见在重命名操作期间保护数据。对于本演练,可以不对部署脚本进行任何操作。

    警告:

    如果更改部署脚本,则必须通过从 T-SQL 编辑器运行部署脚本手动对其进行部署。不能使用部署命令对其进行部署。

  4. 关闭部署脚本。

  5. 在“视图”菜单上单击“服务器资源管理器”。

    “服务器资源管理器”窗口随即显示,目标数据库出现在“数据连接”下。如果目标数据库没有显示出来,请打开“工具”菜单,然后单击“连接到数据库”添加一个到目标数据库的连接。

  6. 在“服务器资源管理器”中,展开目标数据库,展开“表”节点,然后展开 Orders 表。

    将显示具有原始名称的 ShippedDate 列。

  7. 在“解决方案资源管理器”中,单击数据库项目 RefactorNorthwind。

  8. 在“生成”菜单上单击“部署”。也可以在“解决方案资源管理器”中右击项目,然后单击“部署”。

    警告:

    应该针对测试数据库或开发数据库运行此部署。不应针对成品数据库运行此部署。

    可以通过使用部署脚本来将数据库项目部署到目标数据库中。部署状态显示在“输出”窗口中,最后一行应显示“部署已成功”。

  9. 在“服务器资源管理器”中,右击“表”节点,然后单击“刷新”。

    将显示具有新名称 ShippedDateAndTime 的 ShippedDate 列。

请参见

概念

数据库项目设置概述

其他资源

重构数据库

生成和部署数据库架构