dbo .__ RefactorLog表未包含在bacpac文件中

时间:2014-08-26 23:35:54

标签: sql-server sql-server-data-tools

我有一个我创建的数据库,我正在通过sqlproj进行修改。因此,数据库模式具有dbo .__ RefactorLog表。 当我从数据库导出bacpac文件时,除了__RefactorLog表之外,还包括模式中的所有内容。

这是预期的行为吗? 有没有办法让__RefactorLog表包含在bacpac中?

2 个答案:

答案 0 :(得分:2)

__RefactorLog表本质上是由SSDT自动生成的“系统”/内部表。 SSDT使用它来记录它在部署期间已经执行的重构操作,即它是否应该重新重构该列或表。

该表不需要是模式的一部分,并且在目标系统上需要时将自动重新创建。

如果您想知道为什么它不会立即自动生成表,它只会在有重写操作时才执行,SSDT需要完成并因此记录为完成。因此,架构的“新”副本不会创建Refactor表。

短篇小说:这是一张内部表,不,它不应该在那里,你所看到的对我来说听起来很正常。

有关重构操作/它们的详细信息,请参阅the MSDN documentation

答案 1 :(得分:0)

这可能是预期的行为,但是如果您在重构日志中有新条目并想在下次发布到从bacpac还原的数据库中应用后再应用,这将成为问题。

要将dbo .__ RefactorLog包含在bacpac中,只需使用以下任一方法在表上删除扩展属性 microsoft_database_tools_support

  • 使用Management Studio(右键单击表->属性->扩展属性->选择属性,然后单击删除)。
  • 使用存储过程EXEC sp_dropextendedproperty N'microsoft_database_tools_support', N'schema', N'dbo', N'table', N'__RefactorLog'

(不知道这是否有副作用,但我们没有经历过

我们在SSDT项目的部署后脚本中使用了第二种方法。