数据库项目概述

更新:2007 年 11 月

数据库项目是数据库架构的脱机表示形式。该表示形式包含创建单个数据库实例或更新现有实例时所需的对象定义和部署脚本。通过创建数据库项目,可以对数据库进行版本控制。

使用数据库项目可以执行以下任务:

  • 创建和部署数据库。

  • 对数据库进行版本控制。

  • 通过从现有部署数据库导入对象创建数据库项目。

  • 将数据库项目与部署数据库进行比较。

  • 导入对部署数据库所做的更改,以使数据库项目再次与部署数据库匹配。

  • 添加、修改和删除数据库对象和脚本。

  • 创建一个或多个数据生成计划以用测试数据填充数据库。

导入数据库架构

可以从数据库实例或脚本中导入数据库架构。导入数据库架构时,会对其进行验证。会将未理解的语句放在 ScriptsIgnoredOnImport.sql 文件中。如果导入的对象定义引用了不再存在的对象,则必须先解决这些错误,然后才可以生成和部署数据库项目。可以通过删除该对象来解决这些错误。例如,如果导入的存储过程引用了不再存在的表,则只需删除该存储过程即可。

导入大型数据库架构时,最初的清除过程可能会很耗时。但是,在消除这些错误后,Visual Studio Team System Database Edition 将确保不会引入新错误。保存修改后的对象定义时,会对所有更改进行验证。

数据库项目结构

一个数据库项目包含一个 .dbproj 文件,并包含三个名为“数据生成计划”、“架构对象”和“脚本”的默认子文件夹。本主题后面的部分将对每个子文件夹进行详细介绍。“解决方案资源管理器”提供了数据库项目的基于文件的视图。“解决方案资源管理器”中显示的每一项都对应与于磁盘上的一个文件或文件夹。而“架构视图”提供了基于对象的视图,这样,无论数据库中的对象是否作为单独的文件存在,您都可以识别它们。

在“解决方案资源管理器”中,可以对整个项目或单个文件执行操作。在“解决方案资源管理器”中,可以对数据库项目执行以下操作:

  • 导入数据库架构
    可以从指定的现有数据库导入架构信息。

  • 导入脚本
    可以从包含对象定义的脚本导入一个或多个对象的架构信息。

  • 生成
    可以生成使用相同架构创建数据库或使用架构同步现有数据库的生成脚本。数据库项目的属性控制部署以及目标数据库的设置。

  • 重新生成
    即使项目自上次生成之后未曾更改,您也可以使用该选项生成项目。

  • 部署
    根据您选择的配置,可以向新数据库或现有数据库部署数据库项目。如果数据库项目不是最新的,该操作还会在部署数据库项目之前生成数据库项目。

  • 清理
    可以删除作为生成、重新生成或部署操作的结果所生成的现有生成脚本。

  • 添加
    可以将文件夹和项目项文件添加到数据库项目中。例如,可以添加包含数据库对象定义的项目项。

  • 设为启动项目
    可以指定数据库项目应标记为解决方案的启动项目。因为数据库项目不包含用户界面元素,所以如果解决方案中还有其他项目,则将其中之一作为启动项目可能会更好。

  • 将解决方案添加到源代码管理
    可以对包含数据库项目的解决方案进行版本控制。

  • 剪切
    可以将项目复制到剪贴板。该操作还会标记项目,以便在将其粘贴到其他位置时从解决方案中的当前位置移除。

  • 移除
    可以从当前解决方案中移除数据库项目。

  • 重命名
    可以重命名数据库项目。如果项目受版本控制,则将签出该项目以完成此操作。

  • 卸载项目
    可以卸载数据库项目。如果打开的是包含多个项目的大型解决方案,而您只想加载正在使用的项目,则可能希望卸载某个项目。卸载了数据库项目之后,可以使用“重新加载项目”命令对其进行重新加载。

  • 显示所有文件
    可以切换该设置以显示或隐藏从数据库项目中排除的文件。

  • 属性
    可以查看和自定义项目属性,这些属性控制数据库项目生成和部署的各个方面。

  • 刷新
    可以刷新“解决方案资源管理器”中显示的数据库对象。该操作将重新解释包含对象定义的文件的内容。

数据生成计划

默认情况下,该子文件夹包含所创建的用于为部署数据库生成代表测试数据的所有计划。

可以对“数据生成计划”子文件夹执行以下操作:

  • 添加新项
    可以创建项目项(如数据生成计划)并将其添加到项目。

  • 添加现有项
    可以将已存在的项添加到数据库项目中。在项目文件夹或项目文件夹的子文件夹中会生成该项的副本。

  • 复制
    可以将项目的所有数据生成计划复制到剪贴板。

架构对象

默认情况下,该子文件夹包含所有包含数据库项目中对象的定义的文件,这些文件按对象类型分组。

可以对“架构对象”子文件夹执行以下操作:

  • 添加新项
    可以创建项目项(如表定义)并将其添加到项目。

  • 添加现有项
    可以将已存在的项添加到数据库项目中。在项目文件夹或项目文件夹的子文件夹中会生成该项的副本。

  • 复制
    可以将项目中的所有架构对象复制到剪贴板。

数据库架构对象是在项目文件夹中存储的 .sql 文件集合中定义的。大多数对象都是在单独的文件中定义的。例外情况包括表中的列(列是在包含表定义的文件中指定的)和存储过程或函数的参数(这些参数是在包含存储过程或函数的文件中指定的)。

.sql 文件的“生成操作”属性指示是否要对 .sql 文件进行分析,以查看它是否包含数据库对象的定义。默认情况下,包含数据库对象定义的文件设置为“生成”,而其他 .sql 脚本和杂项文件设置为“不在生成中”。“生成操作”属性还确定生成脚本中是否包含该文件。

每个对象的名称确定其文件名,对象的类型确定其默认文件扩展名,如下所示:

数据库对象类型

名称

函数

对象名称.function.sql

索引

对象名称.index.sql

存储过程

对象名称.proc.sql

对象名称.table.sql

触发器

对象名称.trigger.sql

视图

对象名称.view.sql

主键约束

对象名称.pkey.sql

外键约束

对象名称.fkey.sql

唯一键约束

对象名称.ukey.sql

CHECK 约束

对象名称.chkconst.sql

默认约束

对象名称.defconst.sql

统计信息

对象名称.statistic.sql

如果在对象类型与文件名所暗示的对象类型不匹配的 .sql 文件中定义对象,则在“错误列表”窗口中会显示一个错误。例如,如果向数据库项目添加一个名为 MyTable.table.sql 的文件,但却在该文件中定义了一个视图,则在“错误列表”窗口中会显示一个错误。

可以对“架构对象”子文件夹中的文件执行以下操作:

  • 打开
    根据文件类型,在相应的编辑器中打开文件。例如,对于 .sql 文件,将打开 Transact-SQL (T-SQL) 编辑器。

  • 打开方式
    在您指定的其他编辑器中打开包含对象定义的文件。

  • 查看代码
    在 T-SQL 编辑器中打开文件。

  • 从项目中排除
    将文件标记为已从项目中排除。排除的文件不是在您下一次生成或部署数据库项目时生成的生成脚本的一部分。如果文件正在运行,并且您要部署数据库的其余部分,则可以排除该文件。

  • 剪切
    将所选择的一个或多个文件复制到剪贴板,并将其从数据库项目中删除。

  • 在架构视图中查看对象
    如果尚未显示“架构视图”,则将其打开,并突出显示其定义包含在您单击的所选文件中的数据库对象。该选项只对包含有效对象定义的 .sql 文件可用。

  • 复制
    将所选择的一个或多个文件复制到剪贴板。

  • 重命名
    重命名文件。该操作不对文件的内容执行重命名重构,而是执行简单的文件重命名。

  • 删除
    从数据库项目中删除所选择的一个或多个文件,并将其从磁盘中移除。因为该操作是永久性的,所以会要求您确认删除。

  • 属性
    显示您单击的一个或多个文件的属性窗口。

脚本

默认情况下,该子文件夹包含数据库的管理脚本、预先部署脚本和后期部署脚本。管理脚本的“生成操作”属性设置为“不在生成中”;部署脚本的“生成操作”属性设置为“预先部署”或“后期部署”。一个数据库项目中只能有一个预先部署脚本和一个后期部署脚本。预先部署脚本和后期部署脚本通常包含附加脚本。附加脚本也可以是数据库项目的一部分,并且它的“生成操作”属性设置为“不在生成中”。

可以对“脚本”子文件夹执行以下操作:

  • 添加新项
    可以创建项目项(如管理脚本)并将其添加到项目。

  • 添加现有项
    可以将已存在的项添加到数据库项目中。在项目文件夹或项目文件夹的子文件夹中会生成该项的副本。

  • 复制
    可以将项目中的所有脚本复制到剪贴板。

架构视图

“架构视图”显示数据库项目的另一个视图,着重显示数据库项目所包含的数据库对象。数据生成计划和脚本在“架构视图”中都没有任何对应项,因为这两种类型的项都不包含数据库对象的定义。

在“架构视图”中,可以对项目节点执行以下操作:

  • 导入数据库架构
    可以从指定的现有数据库导入架构信息。

  • 导入脚本
    可以从包含对象定义的脚本导入一个或多个对象的架构信息。

  • 比较架构
    可以将数据库项目的架构信息与部署数据库的架构信息进行比较。

  • 添加
    可以将数据库对象添加到数据库项目,可添加的对象包括表、视图、存储过程、内联函数、表函数、标量函数、用户定义数据类型、文件组、数据库应用程序角色、数据库角色和数据库用户。

  • 属性
    可以查看数据库属性。

说明:

不能将对称密钥、非对称密钥和证书作为对象添加到数据库项目。必须在预先部署脚本中创建这些对象。如果从包含这些对象的数据库中导入架构,则预先部署脚本将包含带有密钥和证书名称的占位符注释。若要创建这些对象,必须修改预先部署脚本。

  • 刷新
    可以刷新“架构视图”中显示的数据库对象。该操作将重新解释包含对象定义的文件的内容。

  • 解决方案资源管理器
    可以将焦点从“解决方案资源管理器”切换到“架构视图”。

  • 筛选架构视图
    可以在按对象类型或按架构显示对象之间切换。必须选择数据库项目中的项目节点或项以切换分组方式。

架构对象

对于“解决方案资源管理器”中的每个数据库项目,“架构视图”中都包含一个节点。每个数据库项目节点都包含数据库项目中所有对象的定义,这些定义按对象类型或架构分组。

可以对“架构视图”中显示的数据库对象执行以下操作:

  • 导入脚本
    可以从包含对象定义的脚本导入一个或多个对象的架构信息。

  • 打开
    可以在 T-SQL 编辑器中打开对象定义。在文件中所做的更改可能会导致更新“架构视图”。例如,如果向表定义中添加列,则这些列将显示在“架构视图”中。

  • 打开方式
    可以在您指定的其他编辑器中打开包含对象定义的文件。

  • 添加
    可以将数据库对象添加到数据库项目,可添加的对象包括表、视图、存储过程、内联函数、表函数、标量函数、用户定义数据类型、文件组、数据库应用程序角色、数据库角色和数据库用户。此外,还可以在数据库项目内添加文件夹以组织对象。

  • 重命名(位于“重构”子菜单上)
    可以重命名数据库对象。如果项目受版本控制,则将签出包含对象定义的文件以完成此操作。此操作会调用重构操作并更新数据库项目内所有对重命名对象的引用和所有关联的数据库单元测试项目。

  • 在解决方案资源管理器中查看文件
    可以使用该选项在“解决方案资源管理器”中查找包含您单击的数据库对象的定义的文件。

  • 属性
    可以查看对象属性。几乎所有可用于“架构视图”中的对象的属性都为只读。若要更改这些属性,必须编辑对象定义。

修改默认项目结构

本主题中所描述的结构是“解决方案资源管理器”中的默认项目结构,但是可以重新排列项目的内容。您可以创建附加文件夹、重命名现有文件夹以及通过拖动或执行剪切和粘贴操作在项目内移动文件。数据库对象定义由其设置为“生成”的“生成操作”属性进行标识,而不是由其在项目中的位置来标识。部署脚本也是由其设置为“预先部署”或“后期部署”的“生成操作”属性进行标识。项目中其他文件的“生成操作”属性设置为“不在生成中”。

只能切换“架构视图”的显示来按对象类型或按架构显示项目的内容。

请参见

概念

数据库对象使用概述

Database Edition 术语概述

其他资源

团队环境中的数据库创建和部署概述

生成和部署数据库架构

处理数据库脚本

在团队环境中处理数据库项目

演练(创建并更新受版本控制的数据库架构)