Sql server 什么';get_new_rowversion()和@DBTS之间的区别是什么
有人知道获取新版本()和@@DBTS之间的区别吗 我找不到任何关于Sql server 什么';get_new_rowversion()和@DBTS之间的区别是什么,sql-server,azure-sql-database,Sql Server,Azure Sql Database,有人知道获取新版本()和@@DBTS之间的区别吗 我找不到任何关于get\u new\u rowversion()的文档,互联网上的一些文章说这是一个仅用于SQL Azure的函数 我还尝试在MSSQLSLocalDB、SQLServer和SQLAzure中运行它们。它们似乎返回相同的值 但我不确定它们是否是等价的功能。我手头没有任何技术文档或可靠的资源,但我将根据我在Azure上的经验尝试回答这个问题 @@DBTS和get\u new\u rowversion()应返回相同的结果,但在不同的环
get\u new\u rowversion()
的文档,互联网上的一些文章说这是一个仅用于SQL Azure的函数
我还尝试在MSSQLSLocalDB、SQLServer和SQLAzure中运行它们。它们似乎返回相同的值
但我不确定它们是否是等价的功能。我手头没有任何技术文档或可靠的资源,但我将根据我在Azure上的经验尝试回答这个问题
@@DBTS
和get\u new\u rowversion()
应返回相同的结果,但在不同的环境中使用
对于外行,我建议MSDN参考,以便更好地理解它。当您使用它时,请注意它在事务中的行为,并将其与MIN\u ACTIVE\u ROWVERSION()
引用MSDN@@DBTS
返回当前数据库的当前时间戳数据类型的值。此时间戳保证在数据库中是唯一的
请注意单词当前数据库。因此,如果您的数据库上有镜像,并且有两个镜像和一个主数据库,则希望@@DBTS有三个不同的值,每个数据库一个
使用镜像时,必须小心使用@DBTS
get\u new\u rowversion()
是一个从SQL Azure中的当前数据库返回rowversion的函数
它仅在SQL Azure中可用,在其他地方不起作用
你会收到这样的信息
找不到存储过程“GET_NEW_ROWVERSION”
在其他版本中
它存在的原因是,在SQLAzure的幕后,同步框架可能会维护多个DB(镜像)副本,以确保在主镜像出现故障时能够快速响应。由于两个不同的DBs可能具有不同的时间计数器,rowversion
的值将不同
然后,SQL Azure必须返回user/TSQL,并为rowversion
返回正确的值,而用户/It不知道user/TSQL是处理辅助数据库实例还是主数据库实例
因此,经验法则是:
在非SQL Azure版本上使用@@DBTS
,因为GET\u NEW\u ROWVERSION
不是
定义李>
在SQL Azure上使用GET_NEW_ROWVERSION
,因为您不知道是哪个版本
DB mirror可能会为您的请求提供服务,您会得到意外的值
从@@DBTS
如果我没有使用任何SQL Azure同步功能(例如副本),我是否可以假定将get_new_rowversion()替换为@DBTS应该具有相同的行为?(我正在将SQLAzure迁移到MSLocalDB)AFAI了解您计划在IaaS场景中使用MSLocalDB。那么@@DBTS也可以为您工作,根据经验法则#1 get#u new#u rowversion也应该出错。MSLocalDB用于功能测试。也许我应该说“重新创建”而不是“迁移”。无论如何,谢谢你的回复,这很有帮助!