架构比较问题的疑难解答

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

依赖项与更新脚本

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

提示

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

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

表和索引选项

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

在比较大型数据库时超时

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

比较文件和文件组

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

此外,如果尝试在同一台服务器上同步两个数据库,则在尝试同步辅助文件和文件流时可能会有问题。 可以通过在同步时排除文件组和文件来解决这些问题。

请参见

任务

如何:修改数据库对象

如何:比较数据库架构

如何:比较并同步两个数据库的数据