更新:2007 年 11 月
数据库脚本是包含不属于数据库架构定义的 Transact-SQL (T-SQL) 语句或实用工具(如 SQLCMD)的附加文件。可以将数据库脚本用作部署步骤的一部分(预先部署和后期部署脚本),数据库脚本也可以是存储在数据库项目中的常规管理脚本。
在对架构对象执行数据库重构操作期间,可以自动更新包含执行该操作期间进行重命名的数据库对象的任何脚本。
“脚本”文件夹支持以下操作:
添加新项
添加文件夹
添加脚本
从项目中排除
版本控制操作(如签入、签出等)
剪切
复制
删除
重命名
属性
“脚本”文件夹中包含的脚本支持以下操作:
打开
打开方式
从项目中排除
版本控制操作(如签入、签出等)
剪切
复制
删除
重命名
属性
部署脚本
生成数据库项目时,预先部署脚本、数据库对象定义和后期部署脚本合并为一个生成脚本。只能指定一个预先部署脚本和一个后期部署脚本,但可在预先部署脚本和后期部署脚本中包含其他脚本。通过使用 SQLCMD 可包含其他脚本。(请参见本主题后面的相关部分。)生成数据库项目时,包含的所有脚本都合并到生成脚本中。
通过将脚本文件的**“生成操作”属性设置为 PreDeploy 可以指定预先部署脚本。同样,通过将脚本文件的“生成操作”**属性设置为 PostDeploy 可以指定后期部署脚本。在将某个脚本指定为预先部署脚本或后期部署脚本时,如果以前已经用该生成操作指定了另一个脚本,那么,系统会自动将另一个脚本的生成操作设置为“不在生成中”。此行为是设计使然,因为每个数据库项目只能有一个预先部署脚本和一个后期部署脚本。
导入数据库架构时,大部分架构信息都会导入到数据库项目中的数据库对象定义中。有些信息(如登录、权限、规则和默认值)则导入到其他的预先部署或后期部署脚本中。当此操作发生时,会在数据库项目的“脚本”文件夹中的“预先部署”或“后期部署”子文件夹中创建附加文件。这些附加的脚本文件根据需要包含在预先部署和后期部署脚本中。包含的脚本的**“生成操作”**属性设置为“不在生成中”,因为这些脚本不直接包含在生成中,而是通过预先部署或后期部署脚本间接包含。系统会将任何无法识别的脚本语句放到“脚本”文件夹中的 ScriptsIgnoredOnImport.sql 文件中。
![]() |
---|
如果部署脚本引用的数据库对象的名称或特征以后进行了更改,则必须手动修改部署脚本,否则部署可能会失败。例如,如果将规则和默认设置绑定到一个表并重命名该表,部署脚本未更新,则除非修改脚本,否则绑定将失败。如果通过使用重命名重构来重命名表,则部署脚本将在重构操作期间更新。 |
导入数据库架构和预先部署脚本
默认情况下,script.predeployment.sql 文件是主要的预先部署脚本。创建数据库项目时,此脚本会自动作为一个空文件创建。导入数据库架构时,可能会自动在预先部署脚本所在的文件夹中创建附加脚本。如果创建了附加脚本,则会向 script.predeployment.sql 文件中添加语句,以包含附加脚本。通过将其**“生成操作”**属性设置为 PreDeploy,可将不同文件指定为预先部署脚本。
![]() |
---|
将“生成操作”属性设置为 PreDeploy 时,只能有一个预先部署脚本。若要在预先部署步骤中使用多个脚本,必须使用以下语句来指定包含其他预先部署脚本的顶级预先部署脚本:SQLCMD :r.\文件名.sql。 |
![]() |
---|
必须手动修改预先部署脚本,以创建满足以下条件的任何对象:在执行架构导入操作的过程中,无法导入重新创建对象所需的足够信息。例如,必须修改该脚本来创建加密密钥和证书。 |
导入数据库架构时,将生成下表中的脚本文件:
文件名 |
包含顺序 |
说明 |
||
---|---|---|---|---|
Logins.sql |
第一个 |
此脚本包含源数据库中定义的所有 Microsoft SQL Server 登录的定义。使用 Microsoft SQL Server 2005 中的 CREATE LOGIN 和 SQL Server 2000 中的 sp_addlogin 可对登录编写脚本。 |
||
LinkedServers.sql |
第二个 |
此脚本包含用于创建链接服务器的语句。(有关更多信息,请参见 Microsoft 网站上的“链接服务器”。)导入数据库架构时,会在源数据库中每个链接服务器的脚本中添加一个 sp_addlinkedserver 语句。 |
||
CustomErrors.sql |
第三个 |
此脚本包含用户定义的错误消息。导入数据库架构时,会在源数据库中定义的每条自定义错误消息的脚本中添加一个 sp_addmessage 语句。 |
||
EncryptionKeysAndCertificates.sql |
第四个 |
此脚本包含用于源数据库中每个 CREATE SYMMETRIC KEY、CREATE ASYMMETRIC KEY、CREATE MASTER KEY 和 CREATE CERTIFICATE 语句的占位符。
|
导入数据库架构和后期部署脚本
默认情况下,script.postdeployment.sql 文件是主要的后期部署脚本。创建数据库项目时,此脚本会自动作为一个空文件创建。导入数据库架构时,可能会创建附加脚本。如果创建了附加脚本,则会向 script.postdeployment.sql 文件中添加语句,以包含附加脚本。通过将其**“生成操作”**属性设置为 PostDeploy,可将不同文件指定为后期部署脚本。
![]() |
---|
将“生成操作”属性设置为 PostDeploy 时,只能有一个后期部署脚本。若要在后期部署步骤中使用多个脚本,必须使用以下语句创建包含其他后期部署脚本的顶级后期部署脚本:SQLCMD :r.\文件名.sql。 |
![]() |
---|
您可能需要手动修改后期部署脚本,以创建或更新满足以下条件的任何对象:在执行架构导入操作的过程中,无法导入重新创建或修改对象所需的足够信息。将用户与角色关联便是这样的示例。 |
导入数据库架构时,将生成下表中的脚本文件:
文件名 |
顺序 |
说明 |
---|---|---|
Storage.sql |
第一个 |
此脚本包含与存储对象(如文件和文件组)相关的定义。 |
Permissions.sql |
第二个 |
此脚本包含对于目标数据库的任何 GRANT、REVOKE 或 DENY 权限。导入数据库架构时,会为源数据库中指定的任何权限将语句添加到 Permissions.sql 中。 |
RoleMemberships.sql |
第三个 |
此脚本包含将用户与角色关联所需的任何 sp_addrolemember 语句。 |
RulesAndDefaults.sql |
第四个 |
此脚本包含用于为目标数据库定义规则和默认设置的附加语句。导入数据库架构时,会向 RulesAndDefaults 脚本中添加附加语句,以便将规则和默认设置绑定到列或别名数据类型,并将安全帐户作为数据库中现有 SQL Server 数据库角色的成员添加。有关将添加到该脚本中的语句,请参见下表。 |
DatabaseObjectOptions.sql |
第五个 |
此脚本包含在部署之后应用于数据库对象的选项。 |
Signatures.sql |
第六个 |
此脚本包含用于目标数据库的任何签名定义。导入数据库架构时,会在 Signatures.sql 脚本中为源数据库中定义的每个签名添加附加语句。 注意 此脚本只对 SQL Server 2005 使用。 |
规则、默认设置和安全帐户是使用以下各项来添加的:
要执行的操作 |
SQL Server 2005 |
SQL Server 2000 |
---|---|---|
将规则绑定到列或别名数据类型 |
ALTER TABLE表名称ADD CONSTRAINT约束名称CHECK |
sp_bindrule |
将默认设置绑定到列或别名数据类型 |
ALTER TABLE表名称ADD CONSTRAINT约束名称DEFAULT |
sp_binddefault |
将安全帐户作为现有 SQL Server 数据库角色的成员添加 |
sp_addrolemember |
sp_addrolemember |
附加脚本
除了部署脚本外,还可向数据库项目中添加其他公用脚本。可向数据库项目的脚本文件夹中添加子文件夹,以便帮助组织这些附加脚本。在 T-SQL 编辑器中打开任何附加脚本时,可以连接到数据库服务器并全部或部分执行脚本。例如,如果有运行的例程审核脚本,则此方法将是保留每个脚本及其关联的数据库的简便方法,并可将它们与数据库架构置于相同的版本控制系统下。这些脚本会将自身的**“生成操作”**属性设置为“不在生成中”。