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

Có thể thực hiện tăng thủ công chỉ với SQL INSERT đơn giản không?

Bạn hiểu rằng bạn sẽ có va chạm phải không?

bạn cần phải làm điều gì đó như thế này và điều này có thể gây ra bế tắc, vì vậy hãy chắc chắn những gì bạn đang cố gắng hoàn thành ở đây

DECLARE @id int
BEGIN TRAN

    SELECT @id = MAX(id) + 1 FROM Table1 WITH (UPDLOCK, HOLDLOCK)
    INSERT INTO Table1(id, data_field)
    VALUES (@id ,'[blob of data]')
COMMIT TRAN

Để giải thích sự việc va chạm, tôi đã cung cấp một số mã

trước tiên hãy tạo bảng này và chèn một hàng

CREATE TABLE Table1(id int primary key not null, data_field char(100))
GO
Insert Table1 values(1,'[blob of data]')
Go

Bây giờ, hãy mở hai cửa sổ truy vấn và chạy nó cùng lúc

declare @i int
set @i =1
while @i < 10000
begin
BEGIN TRAN

INSERT INTO Table1(id, data_field)
SELECT MAX(id) + 1, '[blob of data]' FROM Table1

COMMIT TRAN;
set @i [email protected] + 1
end

Bạn sẽ thấy một loạt những thứ này

Máy chủ:Msg 2627, Mức 14, Trạng thái 1, Dòng 7 Vi phạm ràng buộc KHÓA CHÍNH 'PK__Table1__3213E83F2962141D'. Không thể chèn khóa trùng lặp trong đối tượng 'dbo.Table1'. Câu lệnh đã bị chấm dứt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL TRY-CATCH và các cột bị thiếu

  2. Sự cố về ngày giờ của máy chủ SQL. Mỹ so với Anh?

  3. Truy vấn một giá trị duy nhất dựa trên tổng hợp của một giá trị khác trong khi nhóm hoàn toàn trên một giá trị thứ ba

  4. Chi phí cho khoảng không quảng cáo nhập trước - xuất trước (FIFO)

  5. Câu lệnh SQL để chèn bản ghi vào bảng có cột nhận dạng?