架构比较问题的疑难解答

更新:2007 年 11 月

在比较两个数据库架构时可能会遇到本主题中的问题。

依赖项与更新脚本

为了在更新脚本中生成正确的对象顺序,架构比较会检查对象依赖项。例如,如果视图依赖于表,则该表必须先于视图创建。如果依赖于其他对象的对象不使用架构限定的名称,则可能无法标识依赖项,更新或创建脚本中语句的顺序可能不正确。更新目标使其与源匹配或者将更改部署到数据库时,这种差异就可能导致错误。数据库生成脚本同样存在这个问题。

说明:

若要解决此问题,请确保对涉及依赖关系的对象的名称进行架构限定。在下面的示例中,如果将语句结尾更改为引用 [dbo].[KeysTable] 而不仅仅是 KeysTable,就可以保证依赖关系将正确标识:

CREATE VIEW [NewUser].[ViewReferencingScalarFunction] AS SELECT Column2, dbo.SimpleMultiplyParamByTwo(PK_Column) AS [Function] FROM KeysTable

对称密钥、非对称密钥和证书

在 Visual Studio Team System Database Edition 中,不能创建对称密钥、非对称密钥或证书作为数据库对象。导入数据库架构时,占位符注释将与密钥和证书名称一起放入预先部署脚本中。若要创建这些对象,必须编辑预先部署脚本。同样,比较数据库架构时,架构更新脚本中不包含创建缺失的对称密钥、非对称密钥或证书所需的 Transact-SQL (T-SQL) 命令。您必须将这些更新脚本导出到编辑器并添加语句才能创建这些对象。有关 Transact-SQL (T-SQL) 语句的更多信息,请参见 Transact-SQL Reference(Transact-SQL 引用)。

表和索引选项

“架构比较”不对那些通过使用 sp_tableoption 或 sp_indexoption 设置的选项进行比较,也不为它们编写脚本。对于此问题没有解决方法。

在比较大型数据库时超时

如果在比较大型数据库的架构时遇到超时错误,则可能需要增大超时值。在用户界面中看不到此选项。必须修改存储在注册表中的 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\DBPro\Database 下、单位为秒的 QueryTimeoutSeconds 值。默认情况下,超时值为 60 秒。

比较文件和文件组

如果目标数据库中的文件组是只读的,则属性将始终显示为数据库与数据库项目之间进行架构比较得到的差异。另外,当您进行架构比较时,主文件组会被忽略。

请参见

任务

如何:修改数据库对象

如何:查看数据差异

概念

Database Edition 术语概述