Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mungkinkah menerapkan peningkatan manual hanya dengan SQL INSERT sederhana?

Anda mengerti bahwa Anda akan mengalami tabrakan kan?

Anda perlu melakukan sesuatu seperti ini dan ini dapat menyebabkan kebuntuan, jadi pastikan apa yang ingin Anda capai di sini

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

Untuk menjelaskan hal tabrakan, saya telah menyediakan beberapa kode

pertama buat tabel ini dan masukkan satu baris

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

Sekarang buka dua jendela kueri dan jalankan ini secara bersamaan

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

Anda akan melihat banyak dari ini

Server:Msg 2627, Level 14, Status 1, Baris 7Pelanggaran batasan PRIMARY KEY 'PK__Table1__3213E83F2962141D'. Tidak dapat menyisipkan kunci duplikat di objek 'dbo.Table1'.Pernyataan telah dihentikan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa cara terbaik untuk menerapkan Asosiasi Polimorfik di SQL Server?

  2. Pratinjau publik pertama SQL Server 2019 :CTP 2.0

  3. Klausa WHERE pada tipe data Teks SQL Server

  4. Ikhtisar jenis SQL Join dengan contoh

  5. Cara mendapatkan daftar semua Batasan Pemeriksaan di Database SQL Server - Tutorial SQL Server / TSQL Bagian 85