Sử dụng `min_active_rowversion` cho các bảng tạm thời toàn cầu


7

Tôi sử dụng các bảng tạm thời toàn cầu để kiểm tra tích hợp dễ dàng ứng dụng được hỗ trợ SQL Server của tôi.

Nhưng chức năng min_active_rowversiondường như không bao gồm các bảng tạm thời toàn cầu, như được thấy ở đây:

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
}

Tôi không thể thấy giới hạn này được ghi nhận ở bất cứ đâu. Điều này có thể được thực hiện để làm việc? Và nếu vậy thì thế nào?

Câu trả lời:


9

Lời giải thích có vẻ là bảng tạm thời toàn cầu trên thực tế là trong TempDB, chứ không phải cơ sở dữ liệu mà mã của bạn đang chạy. Điều này là do hàm MIN_ACTIVE_lawVERSION () nằm trong phạm vi mức cơ sở dữ liệu.

Hàm min_active_rowversion () dường như hoạt động khi bạn sử dụng đoạn mã sau

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.