Verwenden von "min_active_rowversion" für globale temporäre Tabellen

7

Ich verwende globale temporäre Tabellen für einfache Integrationstests meiner von SQL Server unterstützten Anwendung.

Die Funktion min_active_rowversionscheint jedoch keine globalen temporären Tabellen zu enthalten, wie hier dargestellt:

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
}

Ich kann diese Einschränkung nirgendwo dokumentieren. Kann das zum Laufen gebracht werden? Und wenn ja, wie?

Asgerhallas
quelle

Antworten:

9

Die Erklärung scheint zu sein, dass sich die globale temporäre Tabelle tatsächlich in TempDB befindet und nicht in der Datenbank, für die Ihr Code ausgeführt wird. Dies liegt daran, dass die Funktion MIN_ACTIVE_ROWVERSION () auf die Datenbankebene beschränkt ist.

Die Funktion min_active_rowversion () scheint zu funktionieren, wenn Sie den folgenden Code verwenden

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()

dbfiddle

George.Palacios
quelle