Sql Bacpac还原,时间戳/行版本值更改

Sql Bacpac还原,时间戳/行版本值更改,sql,sql-server,azure-sql-database,azure-sql-server,Sql,Sql Server,Azure Sql Database,Azure Sql Server,我以bacpac格式导出了一个Azure SQL DB,并将其导入到一个新服务器。 所有数据都按其应有的方式恢复。但是,我的表有一个timestamp(rowversion)列 这意味着导入到另一台服务器会更改这些列中的值,因为rowversion类型依赖于服务器 我需要在新数据库中保持这些值相同。那么,实现这一目标的最佳方式是什么 由于时间戳是二进制(8)类型,所以我尝试创建一个二进制(8)列,将时间戳值复制到该列中,这是可行的。然后我尝试将二进制(8)更改为时间戳,因为它基本上是相同的?但是

我以bacpac格式导出了一个Azure SQL DB,并将其导入到一个新服务器。 所有数据都按其应有的方式恢复。但是,我的表有一个timestamp(rowversion)列

这意味着导入到另一台服务器会更改这些列中的值,因为rowversion类型依赖于服务器

我需要在新数据库中保持这些值相同。那么,实现这一目标的最佳方式是什么

由于时间戳是二进制(8)类型,所以我尝试创建一个二进制(8)列,将时间戳值复制到该列中,这是可行的。然后我尝试将二进制(8)更改为时间戳,因为它基本上是相同的?但是我得到了这个错误:
无法执行查询。错误:无法将列“mycl”更改为数据类型时间戳。

你知道我怎样才能把二进制(8)修改成时间戳吗


或者,您对如何恢复数据库并保持时间戳值不变有何想法?

BACPAC无法做到这一点,因为这实际上是在重新创建数据库。不能从其他地方复制具有rowversion值的新数据库,因为引擎无法保证新值不会与旧值发生冲突(新数据库不共享旧数据库的事务时间戳)。这样做的安全方法(我认为这是唯一的方法)是备份数据库并以通常的方式还原它--使用
备份
还原
。谢谢。您知道备份和恢复是否也适用于Azure dbs吗?目前看来,Azure dbs不适用?是的,您可以使用Azure Blob进行备份--
支持。不过,我个人没有Azure SQL的使用经验,我只知道这是可能的(不是您如何设置它以及成本是多少)。或者,如果它不起作用,我会复制二进制(8)列中的rowversion值,并从现在起(插入/更新时)使用触发器更改这些值。你认为这样做有什么不对的吗?如果数据库允许你插入显式值,你会遇到同样的问题:你如何确保“新”的时间戳总是在“旧”的时间戳之后,或者至少是“不同”的时间戳?不能依靠
@@DBTS
为您提供正确的值。如果您实际上不关心当前的版本,那么这可能会起作用——然后您可以将所有现有值归零,并依赖于将来生成的时间戳,但随后您当然会丢失与旧数据的链接。