Tôi cần tăng số nguyên trong cột SQL Server 2008.Tránh các sự cố đồng thời với MAX + 1 số nguyên trong SQL Server 2008 ... tạo giá trị IDENTITY riêng
Có vẻ như tôi nên sử dụng cột IDENTITY
, nhưng tôi cần tăng bộ đếm riêng cho từng khách hàng của mình. Hãy nghĩ đến trang web thương mại điện tử nơi mỗi khách hàng có số đơn đặt hàng gia tăng của riêng họ, bắt đầu bằng 1. Giá trị phải là duy nhất (trên mỗi khách hàng).
Ví dụ,
Customer1 (Order #s 1,2,3,4,5...)
Customer2 (Order #s 1,2,3,4,5...)
Về cơ bản, tôi sẽ cần phải tự làm công việc của identity
chức năng SQL kể từ khi số lượng khách hàng là không giới hạn và tôi cần order #
quầy cho mỗi người trong số họ.
Tôi đang làm khá thoải mái:
BEGIN TRANSACTION
SELECT @NewOrderNumber = MAX(OrderNumber)+1 From Orders where [email protected]
INSERT INTO ORDERS VALUES (@NewOrderNumber, other order columns here)
COMMIT TRANSACTION
Vấn đề của tôi là khóa và mối quan tâm đồng thời và đảm bảo một giá trị duy nhất. Có vẻ như chúng ta cần khóa với TABLOCKX
. Nhưng đây là một cơ sở dữ liệu khối lượng lớn và tôi không thể chỉ khóa toàn bộ bảng Orders
mỗi lần tôi cần thực hiện quy trình SELECT MAX+1
và chèn một bản ghi thứ tự mới.
Nhưng, nếu tôi không khóa toàn bộ bảng, thì tôi có thể không nhận được giá trị duy nhất cho khách hàng đó. Bởi vì một số mục nhập của chúng tôi được thực hiện sau khi thực tế theo lô bởi một quy trình Windows đa luồng, có thể là 2 hoạt động sẽ đồng thời muốn chèn một đơn đặt hàng mới cho cùng một khách hàng.
Vậy phương pháp hoặc kỹ thuật khóa nào sẽ tránh được các khóa chết và vẫn cho phép tôi duy trì số thứ tự tăng dần duy nhất PER khách hàng?
thể trùng lặp của [sql server: là làm tổ này trong Transcation đủ để có được một số duy nhất từ cơ sở dữ liệu?] (http://stackoverflow.com/questions/4169591/sql-server-is-this-nesting-in-a-transcation-sufficient-for-getting-a-unique-num) – GSerg