Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 什么';get_new_rowversion()和@DBTS之间的区别是什么_Sql Server_Azure Sql Database - Fatal编程技术网

Sql server 什么';get_new_rowversion()和@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()应返回相同的结果,但在不同的环

有人知道获取新版本()和@@DBTS之间的区别吗

我找不到任何关于
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用于功能测试。也许我应该说“重新创建”而不是“迁移”。无论如何,谢谢你的回复,这很有帮助!