有谁知道 get_new_rowversion()和 @@ DBTS 之间的区别是什么?
我无法找到有关get_new_rowversion()
的任何文档,其中一些关于互联网的文章只是SQL Azure的功能。
我还尝试在MSSQLLocalDB,SQL server和SQL Azure中运行它们。它们似乎返回相同的值。
但我不确定它们是否是等效功能。
答案 0 :(得分:0)
我手边没有任何技术文档或可靠的资源,但我会尝试根据我在Azure上的经验来回答这个问题。
预计 function call(fn) { return fn(); })
和@@DBTS
会返回相同的结果,但会在不同的环境中使用。
对于没有经验的人,我建议MSDN参考@@DBTS
更好地理解它。如果你是它,请注意它在交易中的行为,并与get_new_rowversion()
进行比较/对比
引用MSDN @@ DBTS
返回当前数据库的当前时间戳数据类型的值。此时间戳保证在数据库中唯一。
请注意当前数据库一词。因此,如果您在数据库上有镜像,并且有2个镜像和一个主数据库,那么您希望 MIN_ACTIVE_ROWVERSION()
有三个不同的值,每个数据库一个。< / p>
当您使用镜像时,您必须小心使用@@ DBTS。
@@DBTS
是一个从SQL Azure中的当前数据库返回rowversion的函数。
它仅在SQL Azure中可用,并且在其他地方不起作用。
您会收到类似
的消息无法找到存储过程&#39; GET_NEW_ROWVERSION&#39;。
在其他版本中。
它存在的原因是因为在SQLAzure的幕后,同步框架可能会维护DB(镜像)的多个副本,以确保在主要故障情况下镜像的快速响应。由于两个不同的DB可能具有不同的时间计数器,因此get_new_rowversion()
的值将不同。
然后,如果没有用户/它知道用户/ TSQL是在处理辅助数据库实例还是主数据库实例,SQL Azure就会为rowversion
返回正确值的用户/ TSQL变得非常重要。
所以拇指规则是:
rowversion
,而不是@@DBTS
定义。 GET_NEW_ROWVERSION
,因为您不知道哪个
数据库镜像可以为您的请求提供服务,并且您将获得意外的值
来自GET_NEW_ROWVERSION