Tôi có:
- bảng với dữ liệu hiện có
- Máy chủ SQL 2016 SP1
- Studio quản lý máy chủ SQL 17.5
Tôi đang sử dụng câu lệnh sau để biến bảng của mình thành một bảng tạm thời:
ALTER TABLE [dbo].[AnalysisCustomRollupsV2JoinGroups]
ADD [SysStartTime] DATETIME2(0) GENERATED ALWAYS AS ROW START HIDDEN CONSTRAINT DF_AnalysisCustomRollupsV2JoinGroups_SysStart DEFAULT GETUTCDATE()
,[SysEndTime] DATETIME2(0) GENERATED ALWAYS AS ROW END HIDDEN CONSTRAINT DF_AnalysisCustomRollupsV2JoinGroups_SysEnd DEFAULT CONVERT(DATETIME2(0), '9999-12-31 23:59:59'),
PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime]);
ALTER TABLE [dbo].[AnalysisCustomRollupsV2JoinGroups]
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.AnalysisCustomRollupsV2JoinGroupsChanges));
Vấn đề:
Trong trường hợp SQL cục bộ của tôi, tôi có nhiều cơ sở dữ liệu; Thật kỳ lạ khi truy vấn chạy thành công trên một số trong số chúng và trên một số trong số chúng, nó gây ra lỗi sau:
Msg 13542, Cấp 16, Trạng thái 0, Dòng 51 THÊM THỜI GIAN CHO HỆ THỐNG_TIME trên bảng 'dbo.AnalysisCustomRollupsV2Joingroup' không thành công vì có các bản ghi mở với thời gian bắt đầu được đặt thành giá trị trong tương lai.
Đôi khi, khi tôi gỡ lỗi / thực hiện truy vấn, truy vấn ban đầu chạy thành công.
Tôi đọc, rằng điều này có thể là do tôi có dữ liệu hiện có trong bảng. Vì vậy, tôi đã thay đổi logic như thế này:
- tạo bảng đệm và điền vào nó với tất cả các bản ghi
- xóa các bản ghi từ bảng gốc
- tạo bảng thời gian
- di chuyển các bản ghi trở lại và thả bảng đệm
và một lần nữa, trên một số cơ sở dữ liệu thì không sao, và trên cơ sở dữ liệu khác thì không. Cố gắng giải quyết vấn đề tôi đã tìm thấy như sau:
Đối với StartDate tôi đã chỉ định ngày UTC hiện tại - đây có thể là bất kỳ ngày và giờ nào không có trong tương lai, mặc dù lưu ý rằng đó phải là ngày UTC. Nếu tôi đã thử sử dụng GETDATE, vì tôi hiện đang vào Giờ mùa hè của Anh, tôi sẽ gặp lỗi sau: Msg 13542, Cấp 16, Trạng thái 0, Dòng 51 THÊM THỜI GIAN CHO HỆ THỐNG_TIME trên bảng 'TestAudit.dbo.SomeData' không thành công vì có các bản ghi mở với thời gian bắt đầu được đặt thành một giá trị trong tương lai.
Những gì ở trên có nghĩa là gì? Tôi cần thay đổi thời gian máy? Hoặc do máy cục bộ của tôi không có thời gian UTC nên đôi khi tôi gặp lỗi này?