演练:创建和部署引用另一个数据库的数据库
在本演练中,您将为引用另一个数据库的数据库创建数据库项目。 还通过使用 Visual Studio 高级专业版 管理项目引用的数据库,但将在其他解决方案中进行。 此方法模拟常见的方案,其中不同开发人员管理不同数据库,或开发人员无法部署作为引用目标的数据库。
本演练阐释了以下任务:
如何创建数据库项目。
如何引用由另一个数据库项目生成的 .dbschema 文件。
如何为所引用的数据库项目定义变量及其值。
如何将数据库项目部署到独立开发环境中。
系统必备
必须已安装 Visual Studio。 此外,还必须已完成演练:创建和部署受版本控制的新数据库,并将所得的数据库部署到独立开发环境。 若要将项目添加到版本控制中,必须已经安装了版本控制软件,例如 Visual Studio Team Foundation Server。
创建数据库项目
在**“文件”菜单上指向“新建”,再单击“项目”**。
此时将出现**“新建项目”**对话框。
在**“已安装的模板”下,展开“数据库”节点,然后单击“SQL Server”**。
提示
如果您使用的是 Visual Studio 专业版,则请在“已安装的模板”下查看,展开“数据库”节点,展开“SQL Server”节点,然后单击“高级”。
在模板列表中单击**“SQL Server 2008 数据库项目”**。
在**“名称”**中,键入“OrdersDB”。
选中**“创建解决方案的目录”**复选框。
接受**“位置”、“解决方案名称”和“添加到源代码管理”的默认值,然后单击“确定”**。
提示
此时,可以将该解决方案添加到版本控制中。 在本演练中,您会在最后一个过程中将解决方案添加到版本控制系统中。
新数据库项目“ProductsDB”出现在**“解决方案资源管理器”**中。
在**“视图”菜单上,单击“数据库架构视图”**。
如果**“架构视图”**尚未显示,此时将显示该视图。
接下来,您要向数据库项目中添加表。
向数据库项目添加 OrderItems 表
在**“架构视图”中,右击“OrdersDB”项目,指向“添加”,然后单击“表”**。
此时将出现**“添加新项”**对话框。
在**“模板”中,单击“表”**。
提示
在“类别”列表中,可以单击“表和视图”以更容易地找到表的模板。
在**“名称”**中,键入“OrderItems”作为要给予新表的名称。
单击**“添加”**将该表添加到数据库项目中。
**“解决方案资源管理器”**会在数据库项目中显示新表的文件。 **“架构视图”**会显示新表对象。 此时将出现 Transact-SQL 编辑器,其中显示新表的定义。
在 Transact-SQL 编辑器中,修改表定义以匹配以下示例:
-- ============================================= -- Create OrderItems table -- ============================================= CREATE TABLE [dbo].[OrderItems] ( [POID] INT NOT NULL, [ItemID] INT NOT NULL, [ProductID] INT NOT NULL, [Quantity] INT NOT NULL, [Price] FLOAT NOT NULL, [Notes] NVARCHAR(75) NULL ) ON [PRIMARY]
在**“文件”菜单上,单击“保存 dbo.OrderItems.table.sql”**。
在**“架构视图”中展开“dbo.OrderItems”**节点。
在“dbo.OrderItems”表中展开**“列”**节点。
此时将显示 Transact-SQL 编辑器中定义的列。
接下来,您要向 OrderItems 表添加主键。
向 OrderItems 表添加主键
在**“架构视图”中,右击“dbo.OrderItems”,指向“添加”,然后单击“主键”**。
随即将出现**“添加新项”**对话框。
在**“名称”**中,键入“PK_OrderItems”作为要给予新主键的名称。
单击**“添加”**以添加该主键。
**“解决方案资源管理器”**会在数据库项目中显示该主键的新文件。 **“架构视图”**会显示新主键对象。 随即将出现 Transact-SQL 编辑器,其中显示新键的定义。
提示
该主键的图标带有一个包含白色“x”的红色圆圈,这表示默认定义包含错误。 此行为是因默认定义引用了不存在的“column_1”列所导致的应有反应。
在 Transact-SQL 编辑器中,修改主键定义,匹配以下示例:
-- ============================================= -- Create PK_OrderItems primary key -- ============================================= ALTER TABLE [dbo].[OrderItems] ADD CONSTRAINT [PK_OrderItems] PRIMARY KEY CLUSTERED ([POID], [ItemID]) ON [PRIMARY]
在**“文件”菜单上,单击“保存 dbo.OrderItems.PK_OrderItems.pkey.sql”**。
图标中的错误指示器即会消失,这表明该主键定义现在已有效。
接下来,您要添加跨数据库引用。
添加引用另一个数据库中的表的视图
在**“架构视图”中,右击“视图”节点,指向“添加”,然后单击“视图”**。
在**“名称”中,键入“ItemDetailsView”作为要给予新视图的名称,然后单击“添加”**。
**“解决方案资源管理器”**在数据库项目中显示视图的新文件。 **“架构视图”**显示新的视图对象。 此时将出现 Transact-SQL 编辑器,其中显示新视图的定义。
提示
在“架构视图”中,随该视图的图标显示一个包含白色“x”的红色圆圈,这表示默认定义中有错。 此行为是因默认定义引用了不存在的“[sometableorview]”表或视图所导致的应有反应。
在 Transact-SQL 编辑器中,修改表定义以匹配以下示例:
-- ============================================= -- Create ItemDetailsView view -- ============================================= CREATE VIEW [dbo].[ItemDetailsView] AS SELECT O.[POID], O.[ItemID], P.[ProductName], P.[UnitPrice], O.[Quantity], O.[Price], O.[Notes] FROM [dbo].[OrderItems] AS O INNER JOIN [ProductsDB].[dbo].[Products] AS P ON P.[ProductID] = O.[ProductID]
在**“文件”菜单上,单击“保存 dbo.ItemDetailsView.view.sql”**。
在**“视图”菜单上单击“错误列表”**。
此时在**“错误列表”**中出现六个错误。 因 Visual Studio 高级专业版 无法验证部署数据库项目时要引用的数据库是否将存在于目标服务器上而出错。 这种情况值得注意,因为可能会部署到不同的目标位置。 若要解决此错误,接下来请定义跨数据库引用。
定义跨数据库引用
在**“解决方案资源管理器”中,展开“OrderItems”项目,然后单击“引用”**节点。
在**“项目”菜单上单击“添加数据库引用”**。
提示
还可以右击“引用”节点,然后单击“添加数据库引用”。
将出现**“添加数据库引用”对话框。 由于解决方案只包含一个数据库项目,因此默认情况下指定了“数据库项目架构(.dbschema)”**。
单击**“浏览”**。
此时将显示**“选择数据库文件”**对话框。
指定在必备演练中生成项目时创建的 ProductsDB.dbschema 文件(例如,My Documents\Visual Studio 2008\Projects\ProductsDB\ProductsDB\sql\ProductsDB.dbschema),然后单击**“打开”**。
在**“数据库引用变量”中,选中“定义数据库变量”复选框。 在“名称”中,键入 ReferencedDBVar。 在“值”**中,键入 ProductsDB。
提示
在此演练中,您可以假定所引用的数据库始终位于要添加对其引用的数据库所在的相同服务器上。 因此,不必为服务器名称定义变量。
在**“更新架构对象和脚本”中,选中“更新现有架构对象定义和脚本以使用数据库引用变量”复选框,然后单击“确定”**。
在**“预览更改”对话框中,单击“INNER JOIN”以显示该更改的详细信息,然后单击“应用”**。
视图的定义将更新以匹配以下内容:
-- ============================================= -- Create ItemDetailsView view -- ============================================= CREATE VIEW [dbo].[ItemDetailsView] AS SELECT O.[POID], O.[ItemID], P.[ProductName], P.[UnitPrice], O.[Quantity], O.[Price], O.[Notes] FROM [dbo].[OrderItems] AS O INNER JOIN [$(ReferencedDBVar)].[dbo].[Products] AS P ON P.[ProductID] = O.[ProductID]
所指定的变量名称标识要引用的表,并已解决了六个错误。 接下来,您要生成和部署数据库项目。
配置、生成和部署项目
在**“解决方案资源管理器”**中,单击 OrdersDB(请单击项目,而非解决方案)。
在**“项目”菜单上,单击“OrdersDB 属性”**。
此时将显示该项目的属性窗口。
提示
还可以在“解决方案资源管理器”中右击 OrdersDB,然后单击“属性”。
单击**“部署”**选项卡。
在**“部署操作”中,单击“创建部署脚本(.sql)并部署到数据库”**。
单击**“编辑”**指定目标连接。
指定相应信息,以连接到要向其部署 OrdersDB 数据库的数据库服务器。
重要事项 若要成功完成本演练,必须将数据库部署到在必备演练中向其部署了 ProductsDB 的相同服务器。 如果要部署到不同服务器,则必须为该服务器定义变量。
在**“选择或输入一个数据库名”中,键入“OrdersDB”,然后单击“确定”**。
**“目标连接”框包含连接字符串,“目标数据库名称”**框包含“OrdersDB”。
接受其他选项的默认值,打开**“文件”菜单,然后单击“保存选定项”**。
此时即保存项目部署设置。
在**“生成”菜单上,单击“生成解决方案”**。
即会生成数据库项目。 如果生成成功,会在状态栏中显示**“生成成功”,并会在“输出”**窗口中显示生成结果。
在**“解决方案资源管理器”**中,单击 OrdersDB(请单击项目,而非解决方案)。
在**“生成”菜单上指向“部署 OrdersDB”**。
将使用在生成配置中指定的连接部署数据库项目。 随后会在**“输出”**窗口和状态栏中显示“部署已成功”消息。
后续步骤
现在通常要将数据库项目置于版本控制之下,以便将其与团队共享。