创建和修改数据库脚本

数据库脚本是包含不属于数据库架构定义一部分的 Transact-SQL 语句或实用工具(如 SQLCMD)的附加文件。 可以使用数据库脚本作为部署步骤(预先部署脚本和后期部署脚本)的一部分,也可以在数据库项目中存储常规管理脚本。

如果重命名数据库对象,则可以使用数据库重构自动更新脚本中对该对象的任何引用。

部署脚本

生成数据库项目时,将预先部署脚本、数据库对象定义和后期部署脚本编译为一个数据库架构文件 (.dbschema)。 只能指定一个预先部署脚本和一个后期部署脚本,但可使用 SQLCMD 在这些脚本中包含其他脚本。 有关更多信息,请参见在预先部署或后期部署步骤中包括多个脚本。 生成数据库项目时,包含的所有脚本都合并到生成脚本中。

默认情况下,数据库项目包含一个空的预先部署脚本和一个空的后期部署脚本。 这两个脚本分别命名为 script.predeployment.sql 和 script.postdeployment.sql。

通过将脚本文件的 Build Action 属性设置为 PreDeploy 可以指定预先部署脚本。 同样,通过将脚本文件的 Build Action 属性设置为 PostDeploy 可以指定后期部署脚本。 如果指定某个脚本作为预先部署脚本或后期部署脚本,然后以同样方式指定另一个脚本,则第一个脚本的生成操作将自动设置为“不在生成中”。 此行为是故意为之,因为对于每个数据库项目只能有一个预先部署脚本和一个后期部署脚本。

重要说明重要事项

如果更改部署脚本引用的对象的名称或特征,但不更新脚本中的引用,则部署可能会失败。 例如,可能向后期部署脚本的表中插入数据。 如果重命名该表但不更新脚本,则 INSERT 语句将失败。 如果使用重命名重构对该表进行重命名,则将更新部署脚本。

在预先部署或后期部署步骤中包括多个脚本

若要在前期部署或后期部署步骤中使用多个脚本,则必须使用以下语句指定包括其他预先部署或后期部署脚本的顶级脚本:

SQLCMD :r .\FileName.sql

附加脚本

除了部署脚本外,还可向数据库项目中添加其他公用脚本。 可以通过在数据库项目中的 Scripts 文件夹下创建子文件夹来组织这些脚本。 在 Transact-SQL 编辑器中打开任何一个这些附加脚本时,均可连接到数据库服务器并执行该脚本的全部或一部分。 如果运行例行审核脚本,则此方法是一种方便的途径,可将每个脚本与其关联数据库结合在一起,还能在与数据库架构相同的版本控制系统下放置脚本和数据库。 这些脚本会将其 Build Action 属性设置为“不在生成中”。

常规任务

在下表中,可以找到支持此方案的常规任务的说明,以及指向有关如何成功完成这些任务的更多信息的链接。

任务

支持内容

指定预先部署脚本或后期部署脚本:可以向部署数据库之前或之后运行的脚本添加 Transact-SQL 语句。 从数据库导入对象和设置时,可能会用不表示为数据库对象的语句(如权限、角色定义或签名)来更新部署脚本。

指定管理或实用工具脚本:可以向数据库项目添加管理和实用工具脚本。 还可以在重构数据库项目中的对象时更新脚本。

签入更改:可以将您的脚本签入版本控制,从而与团队共享这些脚本。 通过将脚本置于版本控制之下,如果必须为数据库的旧版本提供服务,则可以存储和检索与该版本匹配的部署脚本和维护脚本。

排除问题:可以详细了解有关如何排除数据库和服务器项目的常见问题。

相关方案

请参见

概念

编写和更改数据库代码

重命名对数据库对象的所有引用

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

生成数据库并将其部署到临时或生产环境中