Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Възможно ли е да се приложи ръчно увеличение само с обикновен SQL INSERT?

Разбирате, че ще имате сблъсъци, нали?

трябва да направите нещо подобно и това може да доведе до блокиране, така че бъдете много сигурни какво се опитвате да постигнете тук

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

За да обясня проблема със сблъсъка, предоставих някакъв код

първо създайте тази таблица и вмъкнете един ред

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

Сега отворете два прозореца за заявки и стартирайте това едновременно

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

Ще видите куп от тези

Сървър:Msg 2627, ниво 14, състояние 1, ред 7, нарушение на ограничението на PRIMARY KEY „PK__Table1__3213E83F2962141D“. Не може да се вмъкне дублиран ключ в обект „dbo.Table1“. Изявлението е прекратено.



  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 сървър тип данни nvarchar от c# код

  2. SQL WHERE.. IN клауза няколко колони

  3. Приоритет на заявка в MS SQL

  4. ODBC и SQL Server 2008:Не можете да използвате подготвени изрази?

  5. SQL Server:изчисляване на периоди от време