更新:2007 年 11 月
在本演练中,您将创建一个包含两个表和一个存储过程的简单数据库。此过程要求您创建一个数据库项目,然后在该项目中创建数据库对象,最后生成该项目并将所做的更改部署到数据库服务器。在创建数据库项目之后,可以通过将数据库项目置于版本控制之下来将数据库架构置于版本控制之下。
本演练的主要步骤如下所示:
- 创建一个数据库项目。 
- 创建数据库表。 
- 为这些表创建索引、键和约束。 
- 创建存储过程。 
- 配置数据库项目属性。 
- 生成数据库项目。 
- 部署数据库项目。 
- 将数据库项目置于版本控制之下。 
先决条件
若要执行本演练,您必须以适当的帐户登录,该帐户应具有在运行 Microsoft SQL Server 2000 的数据库服务器上创建数据库的权限。
创建数据库项目
- 在“文件”菜单上指向“新建”,再单击“项目”。 - 将出现“新建项目”对话框。 
- 在“项目类型”中,展开“数据库项目”,然后单击“Microsoft SQL Server”。 
- 在“模板”中,单击“SQL Server 2000”。 
- 在“名称”中,键入“ProductsDB”。 
- 选中“创建解决方案的目录”复选框。 
- 接受“位置”、“解决方案名称”和“添加到源代码管理”的默认值,然后单击“确定”。 .gif) 说明: 说明:- 此时,可以将该解决方案添加到版本控制中。在本演练中,您会在最后一个过程中将解决方案添加到版本控制系统中。 - 新数据库项目“ProductsDB”出现在“解决方案资源管理器”中。 
- 在“视图”菜单上,指向“其他窗口”,然后单击“架构视图”。 - 如果“架构视图”尚未显示,此时将显示该视图。 - 接下来将向该数据库项目中添加表。 
向数据库项目中添加 Categories 表
- 在“架构视图”中,单击“ProductsDB”下的“表”节点。 
- 在“项目”菜单上,单击“添加新项”。 - 即会出现“添加新项”对话框。 .gif) 说明: 说明:- 也可以在“架构视图”中右击“ProductsDB”项目,指向“添加”,然后单击“表”。 
- 在“模板”中,单击“表”。 
- 在“名称”中,键入“Categories”作为要指定给新表的名称。 
- 单击“添加”将该表添加到数据库项目中。 - “解决方案资源管理器”会在数据库项目中显示新表的文件。“架构视图”会显示新表对象。Transact-SQL (T-SQL) 编辑器出现,其中显示新表的定义。 
- 在 T-SQL 编辑器中,修改该表定义以匹配以下示例: - -- ============================================= -- Create Categories table -- ============================================= CREATE TABLE [dbo].[Categories] ( [CategoryID] [int] NOT NULL IDENTITY(1, 1), [CategoryName] [nvarchar] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [Description] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Picture] [image] NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
- 在“文件”菜单上,单击“保存 dbo.Categories.table.sql”。 
- 在“架构视图”中展开“dbo.Categories”节点。 
- 在“dbo.Categories”表中展开“列”节点。 - 即会显示在 T-SQL 编辑器中定义的四个列。 - 接下来将向 Categories 表添加索引。 
向 Categories 表添加索引
- 在“架构视图”中,单击“dbo.Categories”。 
- 在“项目”菜单上,单击“添加新项”。 - 即会出现“添加新项”对话框。 .gif) 说明: 说明:- 也可以在“架构视图”中右击“dbo.Categories”表,指向“添加”,然后单击“索引”。 
- 在“模板”中,单击“索引”。 
- 在“名称”中,键入“CategoriesCategoryID”作为要指定给新索引的名称。 
- 单击“添加”将该索引添加到“Categories”表中。 - “解决方案资源管理器”会在数据库项目中显示新索引的文件。“架构视图”会显示新索引对象。T-SQL 编辑器出现,其中显示新索引的定义。 .gif) 说明: 说明:- 在“架构视图”中,您会发现该索引的图标带有一个包含白色“x”的红色圆圈,这表示默认定义包含错误。此行为是因默认定义引用了不存在的“column_1”列所导致的应有反应。 
- 在 T-SQL 编辑器中修改索引定义,使其与下面的示例匹配: - -- ============================================= -- Create CategoriesCategoryID index -- ============================================= CREATE NONCLUSTERED INDEX [CategoriesCategoryID] ON [dbo].[Categories] ([CategoryID]) ON [PRIMARY]
- 在“文件”菜单上,单击“保存 CategoriesCategoryID.index.sql”。 - 图标中的错误指示器即会消失,这表明该索引定义现在已有效。 - 接下来将向 Categories 表添加主键。 
向 Categories 表添加主键
- 在“架构视图”中,单击“dbo.Categories”。 
- 在“项目”菜单上,单击“添加新项”。 - 即会出现“添加新项”对话框。 .gif) 说明: 说明:- 也可以在“架构视图”中右击“dbo.Categories”表,指向“添加”,然后单击“主键”。 
- 在“模板”中,单击“主键”。 
- 在“名称”中,键入“PK_Categories”作为要指定给新主键的名称。 
- 单击“添加”将该主键添加到“Categories”表中。 - “解决方案资源管理器”会在该数据库项目中显示新主键的文件。“架构视图”会显示新主键对象。T-SQL 编辑器出现,其中显示新主键的定义。 .gif) 说明: 说明:- 该主键的图标带有一个包含白色“x”的红色圆圈,这表示默认定义包含错误。此行为是因默认定义引用了不存在的“column_1”列所导致的应有反应。 
- 在 T-SQL 编辑器中,修改该主键定义以匹配以下示例: - -- ============================================= -- Create PK_Categories primary key -- ============================================= ALTER TABLE [dbo].[Categories] ADD CONSTRAINT [PK_Categories] PRIMARY KEY CLUSTERED ([CategoryID]) ON [PRIMARY]
- 在“文件”菜单上,单击“保存 PK_Categories.pkey.sql”。 - 图标中的错误指示器即会消失,这表明该主键定义现在已有效。 - 接下来将添加 Products 表。 
添加 Products 表
- 在“架构视图”中,单击“ProductsDB”。 
- 在“项目”菜单上,单击“添加新项”。 - 即会出现“添加新项”对话框。 .gif) 说明: 说明:- 也可以在“架构视图”中右击“ProductsDB”项目,指向“添加”,然后单击“表”。 
- 在“模板”中,单击“表”。 
- 在“名称”中,键入“Products”作为要指定给新表的名称。 
- 单击“添加”将该表添加到数据库项目中。 - “解决方案资源管理器”会在数据库项目中显示新表的文件。“架构视图”会显示新表对象。T-SQL 编辑器出现,其中显示新表的定义。 
- 在 T-SQL 编辑器中,修改该表定义以匹配以下示例: - -- ============================================= -- Create Products table -- ============================================= CREATE TABLE [dbo].[Products] ( [ProductID] [int] NOT NULL IDENTITY(1, 1), [ProductName] [nvarchar] (40) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [CategoryID] [int] NULL, [QuantityPerUnit] [nvarchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [UnitPrice] [money] NULL CONSTRAINT [DF_Products_UnitPrice] DEFAULT (0), [UnitsInStock] [smallint] NULL CONSTRAINT [DF_Products_UnitsInStock] DEFAULT (0), [UnitsOnOrder] [smallint] NULL CONSTRAINT [DF_Products_UnitsOnOrder] DEFAULT (0), [ReorderLevel] [smallint] NULL CONSTRAINT [DF_Products_ReorderLevel] DEFAULT (0), [Discontinued] [bit] NOT NULL CONSTRAINT [DF_Products_Discontinued] DEFAULT (0) ) ON [PRIMARY]
- 在“文件”菜单上,单击“保存 dbo.Products.table.sql”。 
- 在“架构视图”中展开“dbo.Products”节点。 
- 在 dbo.Products 表中展开“列”节点。 - 即会显示在 T-SQL 编辑器中定义的九个列。 - 接下来将向 Products 表添加索引。 
向 Products 表添加索引
- 在“架构视图”中,单击“dbo.Products”。 
- 在“项目”菜单上,单击“添加新项”。 - 即会出现“添加新项”对话框。 .gif) 说明: 说明:- 也可以在“架构视图”中右击“dbo.Products”表,指向“添加”,然后单击“索引”。 
- 在“模板”中,单击“索引”。 
- 在“名称”中,键入“ProductsCategoryID”作为要指定给新索引的名称。 
- 单击“添加”将该索引添加到“Products”表中。 - “解决方案资源管理器”会在数据库项目中显示新索引的文件。“架构视图”会显示新索引对象。T-SQL 编辑器出现,其中显示新索引的定义。 .gif) 说明: 说明:- 在“架构视图”中,您会发现该索引的图标带有一个包含白色“x”的红色圆圈,这表示默认定义包含错误。此行为是因默认定义引用了不存在的“column_1”列所导致的应有反应。 
- 在 T-SQL 编辑器中修改索引定义,使其与下面的示例匹配: - -- ============================================= -- Create ProductsCategoryID index -- ============================================= CREATE NONCLUSTERED INDEX [ProductsCategoryID] ON [dbo].[Products] ([CategoryID]) ON [PRIMARY]
- 在“文件”菜单上,单击“保存 ProductsCategoryID.index.sql”。 - 图标中的错误指示器即会消失,这表明该索引定义现在已有效。 - 接下来将向 Products 表添加主键。 
向 Products 表添加主键
- 在“架构视图”中,单击“dbo.Products”。 
- 在“项目”菜单上,单击“添加新项”。 - 即会出现“添加新项”对话框。 .gif) 说明: 说明:- 也可以在“架构视图”中右击“dbo.Products”表,指向“添加”,然后单击“主键”。 
- 在“模板”中,单击“主键”。 
- 在“名称”中,键入“PK_Products”作为要指定给新主键的名称。 
- 单击“添加”将该主键添加到“Products”表中。 - “解决方案资源管理器”会在该数据库项目中显示新主键的文件。“架构视图”会显示新主键对象。T-SQL 编辑器出现,其中显示新主键的定义。 .gif) 说明: 说明:- 该主键的图标带有一个包含白色“x”的红色圆圈,这表示默认定义包含错误。此行为是因默认定义引用了不存在的“column_1”列所导致的应有反应。 
- 在 T-SQL 编辑器中,修改该主键定义以匹配以下示例: - -- ============================================= -- Create PK_Products primary key -- ============================================= ALTER TABLE [dbo].[Products] ADD CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED ([ProductID]) ON [PRIMARY]
- 在“文件”菜单上,单击“保存 PK_Products.pkey.sql”。 - 图标中的错误指示器即会消失,这表明该主键定义现在已有效。 - 接下来将向 Products 表添加外键。 
在 Products 表和 Categories 表之间添加外键
- 在“架构视图”中,单击“dbo.Products”。 
- 在“项目”菜单上,单击“添加新项”。 - 即会出现“添加新项”对话框。 .gif) 说明: 说明:- 也可以在“架构视图”中右击“dbo.Products”表,指向“添加”,然后单击“外键”。 
- 在“模板”中,单击“外键”。 
- 在“名称”中,键入“FK_ProductsCategories”作为要指定给新外键的名称。 
- 单击“添加”将该外键添加到“Products”表中。 - “解决方案资源管理器”会在该数据库项目中显示新外键的文件。“架构视图”会显示新外键对象。T-SQL 编辑器出现,其中显示新外键的定义。 .gif) 说明: 说明:- 该外键的图标带有一个包含白色“x”的红色圆圈,这表示默认定义包含错误。此行为是因默认定义引用了不存在的“column_1”列所导致的应有反应。 
- 在 T-SQL 编辑器中,修改该外键定义以匹配以下示例: - -- ============================================= -- Create FK_Products_Categories foreign key -- ============================================= ALTER TABLE [dbo].[Products] WITH NOCHECK ADD CONSTRAINT [FK_Products_Categories] FOREIGN KEY ([CategoryID]) REFERENCES [dbo].[Categories] ([CategoryID])
- 在“文件”菜单上,单击“保存 FK_ProductsCategories.fkey.sql”。 - 图标中的错误指示器即会消失,这表明该外键定义现在已有效。 - 接下来将向 Products 表添加 CHECK 约束。 
向 Products 表添加 CHECK 约束
- 在“架构视图”中,单击“dbo.Products”。 
- 在“项目”菜单上,单击“添加新项”。 - 即会出现“添加新项”对话框。 .gif) 说明: 说明:- 也可以在“架构视图”中右击“dbo.Products”表,指向“添加”,然后单击“CHECK 约束”。 
- 在“模板”中,单击“CHECK 约束”。 
- 在“名称”中,键入“CK_ProductsUnitPrice”作为要指定给新 CHECK 约束的名称。 
- 单击“添加”将该约束添加到“Products”表中。 - “解决方案资源管理器”会在数据库项目中显示新约束的文件。“架构视图”会显示新约束对象。T-SQL 编辑器出现,其中显示新约束的定义。 .gif) 说明: 说明:- 该约束的图标带有一个包含白色“x”的红色圆圈,这表示默认定义包含错误。此行为是因默认定义引用了不存在的“column_1”列所导致的应有反应。 
- 在 T-SQL 编辑器中,修改该约束定义以匹配以下示例: - -- ============================================= -- Create CK_ProductsUnitPrice check constraint -- ============================================= ALTER TABLE [dbo].[Products] WITH NOCHECK ADD CONSTRAINT [CK_Products_UnitPrice] CHECK (([UnitPrice] >= 0))
- 在“文件”菜单上,单击“保存 CK_ProductsUnitPrice.chkconst.sql”。 - 图标中的错误指示器即会消失,这表明该约束定义现在已有效。 - 接下来将向该项目添加存储过程。 
创建存储过程
- 在“架构视图”中,单击“ProductsDB”。 
- 在“项目”菜单上,单击“添加新项”。 - 即会出现“添加新项”对话框。 .gif) 说明: 说明:- 也可以在“架构视图”中右击“ProductsDB”项目,指向“添加”,然后单击“存储过程”。 
- 在“模板”中,单击“过程”。 
- 在“名称”中,键入“Ten Most Expensive Products”作为要指定给新存储过程的名称。 
- 单击“添加”将该存储过程添加到数据库项目中。 - “解决方案资源管理器”会在该数据库项目中显示新存储过程的文件。“架构视图”会显示新存储过程对象。T-SQL 编辑器出现,其中显示新存储过程的定义。 
- 在 T-SQL 编辑器中,修改该存储过程定义以匹配以下示例: - -- ============================================= -- Create Ten Most Expensive Products -- stored procedure -- ============================================= CREATE PROCEDURE [dbo].[Ten Most Expensive Products] AS SET ROWCOUNT 10 SELECT Products.ProductName AS TenMostExpensiveProducts, Products.UnitPrice FROM Products ORDER BY Products.UnitPrice DESC RETURN 0
- 在“文件”菜单上,单击“保存 dbo.Ten Most Expensive Products.proc.sql”。 
- 在“架构视图”中展开“存储过程”节点。 - 即会显示在 T-SQL 编辑器中定义的过程。 - 接下来将在生成和部署该项目之前配置其设置。 
配置项目生成设置
- 在“解决方案资源管理器”中,单击“ProductsDB”(请单击项目,而非解决方案)。 
- 在“项目”菜单上,单击“ProductsDB 属性”。 - 将显示项目属性窗口。 .gif) 说明: 说明:- 此外,也可以在“解决方案资源管理器”中右击“ProductsDB”,然后单击“属性”。 
- 单击“生成”选项卡。 
- 单击“编辑”按钮指定目标连接。 
- 指定要连接到的数据库服务器的信息,您将在该服务器中部署 ProductsDB 数据库。 
- 在“选择或输入一个数据库名”中,键入“ProductsDB”。 
- 单击“确定”。 - 将用连接字符串填充“目标连接”。注意,“目标数据库名称”设置为“ProductsDB”。 
- 接受其他选项的默认值。 
- 在“文件”菜单上,单击“保存选定项”。 - 将保存该项目的生成设置。 - 接下来将生成数据库项目。 
生成数据库项目
- 在“生成”菜单上,单击“生成解决方案”。 - 即会生成数据库项目。如果成功,会在状态栏中显示“生成成功”,并会在“输出”窗口中显示生成结果。 - 最后,将部署数据库项目。 
将数据库项目部署到数据库服务器
- 在“解决方案资源管理器”中,单击“ProductsDB”(请单击项目,而非解决方案)。 
- 在“生成”菜单上指向“部署 项目名称”。 - 将使用在生成配置中指定的连接部署数据库项目。随后会在“输出”窗口和状态栏中显示“部署已成功”消息。 
将数据库项目签入到版本控制中
- 在“解决方案资源管理器”中,单击“ProductsDB”(请单击解决方案)。 
- 在“文件”菜单上,指向“源代码管理”,然后单击“将解决方案添加到源代码管理”。 - 按照版本控制软件的说明将解决方案、数据库项目及其内容添加到版本控制中并签入所有文件。数据库项目代表数据库架构的主控副本且处于版本控制之下。 
后续步骤
您可以使用其他演练了解如何使用已部署的现有数据库。