Khắc phục: Khóa bảng không được báo cáo khi bạn chèn nhiều dòng vào bảng trong SQL Server 2008 hay trong SQL Server 2008 R2

Áp dụng cho: Microsoft SQL Server 2008 Service Pack 4Microsoft SQL Server 2008 R2 Service Pack 3

Triệu chứng


Hãy xem xét tình huống sau:
  • Bạn chèn nhiều dòng vào bảng trong Microsoft SQL Server 2008 hay trong SQL Server 2008 R2 bằng cách sử dụng một trong các truy vấn sau đây:
    • INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
    • SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>
    Lưu ý́
    • Giữ chỗ < target_table > biểu thị tên bảng đích thực.
    • Giữ chỗ < xác lập > đại diện xác lập thực.
    • Giữ chỗ < source_table > biểu thị bảng thực nguồn.
  • Ngưỡng khóa báo cáo bảng vượt quá.
Trong trường hợp này, cơ sở dữ liệu không chuyển khóa bảng.

Nguyên nhân


Sự cố này xảy ra vì SQL Server không nội bộ đếm tất cả các ổ khóa mới được tạo ra bởi chèn hoạt động. Do đó, khóa báo cáo ngưỡng không có thể được kích hoạt khi cần thiết.

Giải pháp


Thông tin gói dịch vụ cho SQL Server 2008

Để khắc phục sự cố này, tải xuống gói dịch vụ mới nhất cho SQL Server 2008.For biết thêm thông tin, bấm vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
968382 Cách tải gói dịch vụ mới nhất cho SQL Server 2008

Thông tin gói dịch vụ SQL Server 2008 R2

Để khắc phục sự cố này, tải xuống các gói dịch vụ mới nhất cho SQL Server 2008 R2. Để biết thêm thông tin, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:
2527041Cách tải gói dịch vụ mới nhất cho SQL Server 2008 R2

Trạng thái


Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".Sự cố này đã được sửa lần đầu tiên cho SQL Server 2008.This sự cố đầu tiên được khắc phục trong SQL Server 2008 R2 gói dịch vụ 1 cho SQL Server 2008 R2 trong SQL Server 2008 gói dịch vụ 2.

Thông tin Bổ sung


Để biết thêm chi tiết về khóa báo cáo, hãy ghé thăm website sau của Microsoft TechNet:Để xác định xem khoá bàn được báo cáo, hãy chạy câu lệnh Transact-SQL sau:
USE tempdbGOCREATE TABLE x (i INT NOT NULL PRIMARY KEY)GOBEGIN TRANINSERT xSELECT TOP (40000)ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rFROM master..spt_values a, master..spt_values bORDER BYrSELECTCOUNT(*)FROM sys.dm_tran_locksWHERE request_session_id = @@SPID ROLLBACKGODROP TABLE x 
Nếu khoá bảng được báo cáo, lệnh SELECT cuối trả lại giá trị 1 hoặc 2. Nếu khoá bàn không báo cáo, lệnh SELECT cuối trả lại giá trị 40,066 hoặc 40.067 người.