Nếu bạn đang tìm cách nhân đôi sự thuận tiện khi có khóa INT duy nhất được gán tự động khi chèn, bạn có thể thêm trình kích hoạt INSTEAD OF INSERT
sử dụng MAX của cột hiện tại +1 để xác định giá trị tiếp theo.
Nếu cột có giá trị nhận dạng là khóa đầu tiên trong chỉ mục, truy vấn MAX sẽ là chỉ mục đơn giản tìm kiếm, rất hiệu quả.
Giao dịch sẽ đảm bảo rằng các giá trị duy nhất được chỉ định nhưng cách tiếp cận này sẽ có ngữ nghĩa khóa khác với cột nhận dạng chuẩn. IIRC, SQL Server có thể phân bổ một giá trị nhận dạng khác nhau cho mỗi giao dịch yêu cầu nó song song và nếu một giao dịch được khôi phục, giá trị được phân bổ cho nó sẽ bị loại bỏ. Phương pháp MAX sẽ chỉ cho phép một giao dịch chèn hàng vào bảng tại một thời điểm.
Cách tiếp cận liên quan có thể là để có bảng giá trị khóa chuyên dụng được khóa bằng tên bảng, ID người thuê và giá trị nhận dạng hiện tại. Nó sẽ yêu cầu kích hoạt tương tự INSTEAD OF INSERT
và nhiều bản mẫu khác để truy vấn và giữ cho bảng khóa đó được cập nhật. Nó sẽ không cải thiện hoạt động song song mặc dù; khóa sẽ chỉ ở trên một bản ghi của bàn khác.Một trong những khả năng để sửa chữa các nút cổ chai sẽ bao gồm SPID hiện tại trong giá trị của khóa (bây giờ khóa nhận dạng là một sự kết hợp của int tuần tự và bất cứ điều gì SPID đã xảy ra để phân bổ nó và không đơn giản là tuần tự), sử dụng bản sắc chuyên dụng giá trị bảng và chèn hồ sơ có mỗi SPID khi cần thiết; bảng nhận dạng PK sẽ là (tên bảng, đối tượng thuê, SPID) và có một cột không phải khóa với giá trị tuần tự hiện tại. Bằng cách đó, mỗi SPID sẽ có hồ bơi nhận dạng được phân bổ động của riêng mình và sẽ chỉ có bản ghi SPID riêng của mình.
Một nhược điểm khác là duy trì các trình kích hoạt phải được cập nhật bất cứ khi nào bạn thay đổi các cột trong bất kỳ bảng nhận dạng đặc biệt nào.
Nguồn
2012-12-18 22:05:46
"Tôi không thực sự muốn thay thế giá trị khóa thay thế để chảy máu giữa các khách hàng ..." Tôi tò mò, tại sao bạn không muốn điều này xảy ra? –
Chủ yếu là vì nó sẽ cung cấp cho mọi người một ý tưởng về số lượng hàng mà tôi đang xử lý, trong thế giới của tôi, chúng sẽ hoàn toàn bị chặn khỏi nhau –
Thực tế bạn có thể có cả khóa chính thay thế cho toàn vẹn tham chiếu (ẩn với khách hàng) và hai cột chỉ số duy nhất, ví dụ: (Cust_id, Order_Number) – alexm