Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

duy trì cột tăng tự động tùy chỉnh

Vấn đề là nơi bạn có nhiều hàng đang được chèn, bạn đang sử dụng cùng một ID có sẵn tiếp theo cho tất cả các hàng, bạn cần thêm ROW_NUMBER() để đảm bảo xid là duy nhất trong phần chèn:

insert into [xtable] (XID)
select [x].[NextavailableID] + ROW_NUMBER() OVER (ORDER BY i.ID)
from inserted [i]
cross apply
(
  select coalesce(max([t].[XID]), 0) [NextavailableID]
  from [xtable] [t] WITH (TABLOCK, HOLDLOCK)
) [x];

Về việc ngăn chặn các bản sao, bạn có thể sử dụng các gợi ý về bảng để khóa xtable khi nhận được xid tối đa .

Hạn chế của việc sử dụng những ổ khóa này là bạn sẽ bị bế tắc. Bạn nên có một ràng buộc / chỉ mục duy nhất trên cột này vì điều này sẽ ngăn chặn các bản sao, tuy nhiên, nó cũng sẽ dẫn đến các trường hợp ngoại lệ khi một điều kiện chủng tộc được đáp ứng. Cuối cùng, bất kỳ phương pháp nào bạn chọn, bạn sẽ cần phải hy sinh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cây con sql cha với thứ tự sắp xếp

  2. Cách IIF () hoạt động trong SQL Server

  3. Cách thực thi Thủ tục được lưu trữ từ Laravel

  4. Làm thế nào để kiểm tra kết quả công việc gói SSIS sau khi nó đã hoàn thành việc thực thi?

  5. Biểu thức IN biến trong SQL