我有一个我创建的数据库,我正在通过sqlproj进行修改。因此,数据库模式具有dbo .__ RefactorLog表。 当我从数据库导出bacpac文件时,除了__RefactorLog表之外,还包括模式中的所有内容。
这是预期的行为吗? 有没有办法让__RefactorLog表包含在bacpac中?
答案 0 :(得分:2)
__RefactorLog表本质上是由SSDT自动生成的“系统”/内部表。 SSDT使用它来记录它在部署期间已经执行的重构操作,即它是否应该重新重构该列或表。
该表不需要是模式的一部分,并且在目标系统上需要时将自动重新创建。
如果您想知道为什么它不会立即自动生成表,它只会在有重写操作时才执行,SSDT需要完成并因此记录为完成。因此,架构的“新”副本不会创建Refactor表。
短篇小说:这是一张内部表,不,它不应该在那里,你所看到的对我来说听起来很正常。
有关重构操作/它们的详细信息,请参阅the MSDN documentation。
答案 1 :(得分:0)
这可能是预期的行为,但是如果您在重构日志中有新条目并想在下次发布到从bacpac还原的数据库中应用后再应用,这将成为问题。
要将dbo .__ RefactorLog包含在bacpac中,只需使用以下任一方法在表上删除扩展属性 microsoft_database_tools_support :
EXEC sp_dropextendedproperty N'microsoft_database_tools_support', N'schema', N'dbo', N'table', N'__RefactorLog'
(不知道这是否有副作用,但我们没有经历过
我们在SSDT项目的部署后脚本中使用了第二种方法。