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)
我在任何地方都看不到此限制。这可以工作吗?如果是这样,如何?
解释似乎是全局临时表实际上在 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)