演练:修改数据库对象

在本演练中,将使用 Transact-SQL 编辑器修改数据库项目中的若干个数据库对象的定义。 此过程由以下步骤组成:

  • 打开包含数据库项目的解决方案。

  • 向表中添加列。 您的客户希望跟踪推出产品的年份。 若要执行此步骤,请向“生产”架构中的“Product”表中添加一个“DateAdded”列。

  • 添加表“Purchasing.ShipperRating”以跟踪客户如何评价处理其订单的发货人所提供的服务质量。 另外,还要添加外键关系和索引。

系统必备

本演练假定您已完成演练:将现有数据库架构置于版本控制之下。 完成该演练后,您获得了一个包含名为“MyAdvWorks”的数据库项目的解决方案。

打开 MyAdvWorks 解决方案

  1. 在**“文件”菜单上指向“打开”,然后单击“项目/解决方案”**。

    出现**“打开项目”**对话框。

  2. 打开“MyAdvWorks”文件夹,双击“MyAdvWorks.sln”。

    MyAdvWorks 解决方案将打开并显示在**“解决方案资源管理器”**中。

  3. 在**“视图”菜单上,单击“数据库架构视图”**。

    如果**“架构视图”**尚未显示,此时将显示该视图。 它显示了数据库项目中定义的所有对象。

  4. 如果尚未在**“架构视图”**中展开数据库项目节点,请将其展开。

    接下来将修改表定义,以向表中添加列。

向“Product”表中添加“DateAdded”列

  1. 在**“架构视图”中,展开“生产”文件夹,展开“表”文件夹,右击“Product”表,然后单击“打开”**。

    或者,也可以双击“Product”表将其打开。

    此时将打开 Transact-SQL 编辑器,其中显示“Product”表的定义。

  2. 在 Transact-SQL 编辑器中,修改该定义以添加“DateAdded”列,如下面的示例所示:

    CREATE TABLE [Production].[Product] (
        [ProductID]             INT              IDENTITY (1, 1) NOT NULL,
        [Name]                  [dbo].[Name]     NOT NULL,
        [ProductNumber]         NVARCHAR (25)    NOT NULL,
        [MakeFlag]              [dbo].[Flag]     NOT NULL,
        [FinishedGoodsFlag]     [dbo].[Flag]     NOT NULL,
        [Color]                 NVARCHAR (15)    NULL,
        [SafetyStockLevel]      SMALLINT         NOT NULL,
        [ReorderPoint]          SMALLINT         NOT NULL,
        [StandardCost]          MONEY            NOT NULL,
        [ListPrice]             MONEY            NOT NULL,
        [Size]                  NVARCHAR (5)     NULL,
        [SizeUnitMeasureCode]   NCHAR (3)        NULL,
        [WeightUnitMeasureCode] NCHAR (3)        NULL,
        [Weight]                DECIMAL (8, 2)   NULL,
        [DaysToManufacture]     INT              NOT NULL,
        [ProductLine]           NCHAR (2)        NULL,
        [Class]                 NCHAR (2)        NULL,
        [Style]                 NCHAR (2)        NULL,
        [ProductSubcategoryID]  INT              NULL,
        [ProductModelID]        INT              NULL,
        [DateAdded]             DATETIME         NOT NULL,
        [SellStartDate]         DATETIME         NOT NULL,
        [SellEndDate]           DATETIME         NULL,
        [DiscontinuedDate]      DATETIME         NULL,
        [rowguid]               UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL,
        [ModifiedDate]          DATETIME         NOT NULL
    );
    
    
    GO
    EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Products sold or used in the manfacturing of sold products.', @level0type = N'SCHEMA', @level0name = N'Production', @level1type = N'TABLE', @level1name = N'Product';
    

    在修改对象定义时,会从版本控制中签出包含该定义的文件。

  3. 在**“文件”菜单上,单击“保存 Product.table.sql”**,保存所做的更改。

    默认情况下,将自动从源代码管理中签出该文件。 如果您已修改了源代码管理设置,则系统可能提示您签出文件,具体取决于版本控制设置的配置。

    接下来将向数据库项目中添加一个名为“ShipperRating”的表。

添加“ShipperRating”表

  1. 在**“架构视图”中,展开“采购”**文件夹,单击“表”文件夹。

  2. 在**“项目”菜单上,单击“添加新项”。 也可以右击“表”文件夹,指向“添加”,再单击“表”**。

    将显示**“添加新项”**对话框。

  3. 在“模板”列表中单击**“表”**。

  4. 在**“名称”中键入 ShipperRating,然后单击“添加”**。

    “ShipperRating”表将添加到数据库项目和源代码管理中。 将出现 Transact-SQL 编辑器,以便您可以编辑此表的定义。

  5. 在 Transact-SQL 编辑器中,修改表定义以匹配以下示例:

    -- =============================================
    -- Create table definition for ShipperRating 
    --Contains a rating of a shipper by
    --a customer, on a particular date.
    --Ratings are from 1-100.
    -- =============================================
    CREATE TABLE [Purchasing].[ShipperRating]
    (
    [ShipperID] [int] NOT NULL,
    [CustomerID] [nchar] (5) COLLATE SQL_Latin1_General_CP1_CS_AS NOT NULL,
    [RatingDate] [datetime] NULL,
    [Rating] [int] NOT NULL
    ) ON [PRIMARY]
    
  6. 在**“文件”菜单上,单击“保存 ShipperRating.table.sql”**,保存所做的更改。

    接下来将向“ShipperRating”表中添加一个外键。

向“ShipperRating”表中添加外键

  1. 在**“架构视图”中右击“ShipperRating”表,指向“添加”,再单击“外键”**。

    将出现**“添加新项”对话框,其中“外键”**模板已突出显示。

  2. 在**“名称”中键入 FK_ShipperRating_Shippers,然后单击“添加”**。

    外键 FK_ShipperRating_Shippers 将添加到项目中的“ShipperRating”表中。 将出现 Transact-SQL 编辑器,以便您可以编辑该外键的定义。

    提示

    该外键的默认定义引用表名称中的第 1 列,而不是实际的表和列。 因此,在“架构视图”中,FK_ShipperRating_Shippers 的图标将显示为错误图标(一个包含白色“x”的红色圆圈)。 另外,在“错误列表”窗口中还会显示一个错误,指示您有一个无效的数据库对象定义。 此行为是预期行为。 “解决方案资源管理器”中包含该对象定义的文件不显示错误图标。

  3. 在 Transact-SQL 编辑器中,修改外键定义,匹配以下示例:

    ALTER TABLE [Purchasing].[ShipperRating]
    ADD CONSTRAINT [FK_ShipperRating_Shippers] 
    FOREIGN KEY ([ShipperID])
    REFERENCES [Purchasing].[ShipMethod] ([ShipMethodID])
    
  4. 在**“文件”菜单上,单击“保存 ShipperRating.FK_ShipperRating_Shippers.fkey.sql”**,保存所做的更改。 现在,该定义已经有效,因此错误图标将被替换为外键约束的常规图标。

    在最后一步中,将向“ShipperRating”表中添加索引。

向“ShipperRating”表中添加索引

  1. 在**“架构视图”**中单击“索引”文件夹。

  2. 在**“项目”菜单上,单击“添加新项”。 也可以右击“索引”文件夹,指向“添加”,然后单击“索引”**。

  3. 在**“模板”列表中,如果尚未突出显示“索引”**,请单击它。

  4. 在**“名称”中键入 ShipperRatingDate,然后单击“添加”**。

    “ShipperRatingDate”索引将添加到项目中的“ShipperRating”表中。 将出现 Transact-SQL 编辑器,以便您可以编辑该索引的定义。

    提示

    该索引的默认定义引用第 1 列而不是实际列名。 因此,“解决方案资源管理器”中的 ShipperRatingDate 图标将显示为错误图标(一个包含白色“x”的红色圆圈)。 另外,在“错误列表”窗口中还将显示一个错误,指示您有一个无效的数据库对象定义。 此行为是预期行为。

  5. 在 Transact-SQL 编辑器中,修改索引定义,匹配以下示例:

    -- =============================================
    -- Create index on RatingDate column in 
    --the ShipperRating table.
    -- =============================================
    CREATE INDEX [ShipperRatingDate]
    ON [Purchasing].[ShipperRating]
    (RatingDate)
    

    在**“文件”菜单上,单击“保存 ShipperRating.ShipperRatingDate.index.sql”**,保存所做的更改。 现在,该定义已经有效,因此错误图标被替换为索引的常规图标。

将更改签入到版本控制中

  1. 在**“视图”菜单上,指向“其他窗口”,然后单击“挂起的更改”**。

    将出现**“挂起的更改”**窗口,以便您可以查看已添加或修改的所有文件。

    提示

    此过程中的步骤假定是使用 Team Foundation 版本控制编写的。 如果不使用 Team Foundation 版本控制,则必须遵循您的版本控制系统的过程。

  2. (可选)指定签入注释。

  3. 单击**“签入”**。

    现在,数据库项目更改已被签入并可供其他团队成员使用。

后续步骤

在修改了此数据库的脱机表示形式后,必须生成这些更改并将其部署到数据库服务器。 若要生成并部署更改,请参见演练:将更改部署到受版本控制的现有数据库

请参见

任务

演练:将现有数据库架构置于版本控制之下

演练:创建和部署受版本控制的新数据库

概念

编写和更改数据库代码

生成数据库并将其部署到独立开发环境中

重构数据库代码和数据