Theo Tài liệu :
Trong SQL Server, bộ đếm thời gian chờ là giá trị bigint và do đó không dễ bị cuộn qua như bộ đếm tương đương trong các phiên bản trước của SQL Server.
Tôi đã thấy điều này với phiên bản SQL Server trước đó khi cuộn qua xảy ra và bạn sẽ nhận được số âm vì các giá trị được ký.
Tôi đã xem mã nguồn và thực sự đây là các giá trị được ký 8 byte. Vì đây là tất cả C ++, tôi đã tạo một repro đơn giản:
#include "stdint.h"
#include <iostream>
using namespace std;
int main()
{
int64_t i8 = 0;
cout << "Size of integer: " << sizeof(i8) << " bytes." << endl;
cout << "Max Value: " << INT64_MAX << endl;
i8 = INT64_MAX + 1;
cout << "Value of MAX + 1: " << i8 << endl;
cin;
return 0;
}
Đầu ra tương tự như những gì tôi đã trải nghiệm trong các phiên bản SQL Server trước đó, giá trị đã ký được chuyển qua. Lưu ý rằng nếu bạn biên dịch cái này, bạn sẽ nhận được một cảnh báo trình biên dịch rằng sẽ có cuộn qua - Tôi đã nhận được cảnh báo trình biên dịch 4307 .
Đầu ra ở trên:
Size of integer: 8 bytes.
Max Value: 9223372036854775807
Value of MAX + 1: -9223372036854775808
Tôi KHÔNG nói rõ đây chính xác là cách SQL Server hoạt động trong mọi trường hợp vì có nhiều sắc thái ... nhưng đây phải là một xấp xỉ tương tự.
Tất cả điều này thực sự có ý nghĩa gì?
Tôi rất nghi ngờ, như Aaron đã nói, rằng bạn sẽ gặp phải cuộn qua các giá trị 64 bit trong môi trường phần cứng hiện tại. Nếu bạn đã làm, nó sẽ dễ dàng phát hiện và thực sự là báo cáo không chính xác hơn bất kỳ vấn đề thực sự theo ý kiến của tôi.