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

Giải pháp CHÈN HOẶC CẬP NHẬT trên SQL Server

đừng quên về các giao dịch. Hiệu suất là tốt, nhưng cách tiếp cận đơn giản (NẾU TỒN TẠI ..) rất nguy hiểm.
Khi nhiều luồng cố gắng thực hiện Chèn hoặc cập nhật, bạn có thể dễ dàng bỏ qua vi phạm khóa chính.

Các giải pháp do @Beau Crawford &@Esteban cung cấp cho thấy ý tưởng chung nhưng dễ xảy ra lỗi.

Để tránh tình trạng bế tắc và vi phạm PK, bạn có thể sử dụng một cái gì đó như sau:

begin tran
if exists (select * from table with (updlock,serializable) where key = @key)
begin
   update table set ...
   where key = @key
end
else
begin
   insert into table (key, ...)
   values (@key, ...)
end
commit tran

hoặc

begin tran
   update table with (serializable) set ...
   where key = @key

   if @@rowcount = 0
   begin
      insert into table (key, ...) values (@key,..)
   end
commit tran


  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ách nhận các giá trị Tối đa và Tối thiểu từ một Bảng bằng cách sử dụng Hàm Tổng hợp - Hướng dẫn SQL Server / TSQL Phần 129

  2. Cách tìm bảng chứa một cột cụ thể trong SQL Server

  3. Xác định các bước cho con trỏ máy chủ SQL - Hướng dẫn sử dụng SQL Server / TSQL

  4. Câu lệnh PRINT trong T-SQL

  5. THIẾT LẬP TEXTSIZE không hoạt động trong SQL Server? Kiểm tra điều này.