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

用户没有执行此操作的权限。

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

虽然专门忽略所有对象类型但是 表格 人们会认为 SQL Compare 不需要访问数据库加密密钥。另请注意:

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

一种解决方案是将 VIEW SERVER STATE 授予 db 用户,但就我而言,我不托管数据库服务,并且不会获得服务器状态的权限。

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

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

有人有解决方法吗?

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

有帮助吗?

解决方案

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

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

其他提示

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

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

sqldbdiff

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top