演练:修改数据库对象
在本演练中,将使用 Transact-SQL 编辑器修改数据库项目中的若干个数据库对象的定义。 此过程由以下步骤组成:
打开包含数据库项目的解决方案。
向表中添加列。 您的客户希望跟踪推出产品的年份。 若要执行此步骤,请向“生产”架构中的“Product”表中添加一个“DateAdded”列。
添加表“Purchasing.ShipperRating”以跟踪客户如何评价处理其订单的发货人所提供的服务质量。 另外,还要添加外键关系和索引。
系统必备
本演练假定您已完成演练:将现有数据库架构置于版本控制之下。 完成该演练后,您获得了一个包含名为“MyAdvWorks”的数据库项目的解决方案。
打开 MyAdvWorks 解决方案
在**“文件”菜单上指向“打开”,然后单击“项目/解决方案”**。
出现**“打开项目”**对话框。
打开“MyAdvWorks”文件夹,双击“MyAdvWorks.sln”。
MyAdvWorks 解决方案将打开并显示在**“解决方案资源管理器”**中。
在**“视图”菜单上,单击“数据库架构视图”**。
如果**“架构视图”**尚未显示,此时将显示该视图。 它显示了数据库项目中定义的所有对象。
如果尚未在**“架构视图”**中展开数据库项目节点,请将其展开。
接下来将修改表定义,以向表中添加列。
向“Product”表中添加“DateAdded”列
在**“架构视图”中,展开“生产”文件夹,展开“表”文件夹,右击“Product”表,然后单击“打开”**。
或者,也可以双击“Product”表将其打开。
此时将打开 Transact-SQL 编辑器,其中显示“Product”表的定义。
在 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';
在修改对象定义时,会从版本控制中签出包含该定义的文件。
在**“文件”菜单上,单击“保存 Product.table.sql”**,保存所做的更改。
默认情况下,将自动从源代码管理中签出该文件。 如果您已修改了源代码管理设置,则系统可能提示您签出文件,具体取决于版本控制设置的配置。
接下来将向数据库项目中添加一个名为“ShipperRating”的表。
添加“ShipperRating”表
在**“架构视图”中,展开“采购”**文件夹,单击“表”文件夹。
在**“项目”菜单上,单击“添加新项”。 也可以右击“表”文件夹,指向“添加”,再单击“表”**。
将显示**“添加新项”**对话框。
在“模板”列表中单击**“表”**。
在**“名称”中键入 ShipperRating,然后单击“添加”**。
“ShipperRating”表将添加到数据库项目和源代码管理中。 将出现 Transact-SQL 编辑器,以便您可以编辑此表的定义。
在 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]
在**“文件”菜单上,单击“保存 ShipperRating.table.sql”**,保存所做的更改。
接下来将向“ShipperRating”表中添加一个外键。
向“ShipperRating”表中添加外键
在**“架构视图”中右击“ShipperRating”表,指向“添加”,再单击“外键”**。
将出现**“添加新项”对话框,其中“外键”**模板已突出显示。
在**“名称”中键入 FK_ShipperRating_Shippers,然后单击“添加”**。
外键 FK_ShipperRating_Shippers 将添加到项目中的“ShipperRating”表中。 将出现 Transact-SQL 编辑器,以便您可以编辑该外键的定义。
提示
该外键的默认定义引用表名称中的第 1 列,而不是实际的表和列。 因此,在“架构视图”中,FK_ShipperRating_Shippers 的图标将显示为错误图标(一个包含白色“x”的红色圆圈)。 另外,在“错误列表”窗口中还会显示一个错误,指示您有一个无效的数据库对象定义。 此行为是预期行为。 “解决方案资源管理器”中包含该对象定义的文件不显示错误图标。
在 Transact-SQL 编辑器中,修改外键定义,匹配以下示例:
ALTER TABLE [Purchasing].[ShipperRating] ADD CONSTRAINT [FK_ShipperRating_Shippers] FOREIGN KEY ([ShipperID]) REFERENCES [Purchasing].[ShipMethod] ([ShipMethodID])
在**“文件”菜单上,单击“保存 ShipperRating.FK_ShipperRating_Shippers.fkey.sql”**,保存所做的更改。 现在,该定义已经有效,因此错误图标将被替换为外键约束的常规图标。
在最后一步中,将向“ShipperRating”表中添加索引。
向“ShipperRating”表中添加索引
在**“架构视图”**中单击“索引”文件夹。
在**“项目”菜单上,单击“添加新项”。 也可以右击“索引”文件夹,指向“添加”,然后单击“索引”**。
在**“模板”列表中,如果尚未突出显示“索引”**,请单击它。
在**“名称”中键入 ShipperRatingDate,然后单击“添加”**。
“ShipperRatingDate”索引将添加到项目中的“ShipperRating”表中。 将出现 Transact-SQL 编辑器,以便您可以编辑该索引的定义。
提示
该索引的默认定义引用第 1 列而不是实际列名。 因此,“解决方案资源管理器”中的 ShipperRatingDate 图标将显示为错误图标(一个包含白色“x”的红色圆圈)。 另外,在“错误列表”窗口中还将显示一个错误,指示您有一个无效的数据库对象定义。 此行为是预期行为。
在 Transact-SQL 编辑器中,修改索引定义,匹配以下示例:
-- ============================================= -- Create index on RatingDate column in --the ShipperRating table. -- ============================================= CREATE INDEX [ShipperRatingDate] ON [Purchasing].[ShipperRating] (RatingDate)
在**“文件”菜单上,单击“保存 ShipperRating.ShipperRatingDate.index.sql”**,保存所做的更改。 现在,该定义已经有效,因此错误图标被替换为索引的常规图标。
将更改签入到版本控制中
在**“视图”菜单上,指向“其他窗口”,然后单击“挂起的更改”**。
将出现**“挂起的更改”**窗口,以便您可以查看已添加或修改的所有文件。
提示
此过程中的步骤假定是使用 Team Foundation 版本控制编写的。 如果不使用 Team Foundation 版本控制,则必须遵循您的版本控制系统的过程。
(可选)指定签入注释。
单击**“签入”**。
现在,数据库项目更改已被签入并可供其他团队成员使用。
后续步骤
在修改了此数据库的脱机表示形式后,必须生成这些更改并将其部署到数据库服务器。 若要生成并部署更改,请参见演练:将更改部署到受版本控制的现有数据库。