对全局临时表使用 `min_active_rowversion`

asg*_*las 7 sql-server temporary-tables sql-server-2016

我使用全局临时表来轻松集成测试我的 SQL Server 支持的应用程序。

但该函数min_active_rowversion似乎不包括全局临时表,如下所示:

using (var connection = new SqlConnection("data source=.;Integrated Security=True"))
{
    connection.Open();

    connection.Execute("create table ##mytable ( Id int, rv rowversion )");

    var a = ToUInt64(connection.Query<byte[]>("select min_active_rowversion()").Single()); // => 20001

    var x = ToUInt64(connection.Query<byte[]>("insert into ##mytable (Id) output Inserted.rv values (1)").Single()); // => 22647

    var b = ToUInt64(connection.Query<byte[]>("select min_active_rowversion()").Single()); // => 20001
}
Run Code Online (Sandbox Code Playgroud)

我在任何地方都看不到此限制。这可以工作吗?如果是这样,如何?

Geo*_*ios 9

解释似乎是全局临时表实际上在 TempDB 中,而不是您的代码运行所针对的数据库。这是因为MIN_ACTIVE_ROWVERSION()函数的作用域是数据库级别。

当您使用以下代码时, min_active_rowversion() 函数似乎可以工作

USE [db]

CREATE table ##mytable ( Id int, rv rowversion )

USE [tempdb]

select min_active_rowversion()

insert into ##mytable (Id) values (1)

select min_active_rowversion()

insert into ##mytable (Id) values (1)

select min_active_rowversion()
Run Code Online (Sandbox Code Playgroud)

数据库小提琴