2

在目标数据库上执行具有 db_owner 权限的模式比较会导致以下错误:

用户无权执行此操作。

使用 SQL Server Profiler 我发现执行针对主数据库视图的查询时会发生此错误:[sys].[dm_database_encryption_keys]

虽然特别忽略了所有对象类型,但一会假定 SQL 比较不需要访问数据库加密密钥。另请注意:

http://social.msdn.microsoft.com/Forums/en-US/vstsdb/thread/c11a5f8a-b9cc-454f-ba77-e1c69141d64b/

一种解决方案是将 GRANT VIEW SERVER STATE 授予 db 用户,但在我的情况下,我没有托管数据库服务,也不会获得服务器状态的权限。

还尝试在比较文件中排除 DatabaseEncryptionKey 元素。

 <PropertyElementName>
    <Name>Microsoft.Data.Schema.Sql.SchemaModel.SqlServer.ISql100DatabaseEncryptionKey</Name>
    <Value>ExcludedType</Value>
 </PropertyElementName>

有人有解决方法吗?

我们使用 MS Data Tools 比较从数据库项目发布到 DTAP 环境。

4

3 回答 3

1

我发现的唯一成功的解决方法是将架构部署到本地开发数据库,​​然后使用该本地数据库作为源而不是数据库项目进行架构比较。

在这种情况下仍然会出现错误,但该Write Updates按钮不再被禁用并且架构按预期更新。

于 2010-08-02T05:51:25.953 回答
0

为什么不能尝试其他(外部)模式比较工具?查看 Red Gate 的 SQL 比较。

于 2010-05-24T13:09:20.963 回答
0

是否必须在 VS 2008 中使用 MS Data 工具?我认为你应该尝试这样的外部工具:

SQLDBDiff

这是用于比较数据库架构的非常好的工具。您也可以生成脚本来同步模式。

于 2010-05-25T08:36:07.613 回答