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

Как да вмъкнете стойности в колона IDENTITY в SQL Server

Ако някога сте се опитвали да вмъкнете стойности в колона за идентичност в SQL Server, може да сте виждали грешка като тази:

Не може да се вмъкне изрична стойност за колона за идентичност в таблица „Изпълнители“, когато IDENTITY_INSERT е зададен на OFF.

Това е нормално. Колоната за самоличност има причина. Той автоматично попълва колоната с нарастваща стойност за всеки ред, който е вмъкнат. Следователно няма нужда да вмъквате стойност в тази колона.

Понякога обаче правите трябва да вмъкнете стойност в колона за идентичност. Например, може да попълвате базата данни с данни, които трябва да запазят собствените си стойности за идентичност. Ако случаят е такъв, ще трябва да замените IDENTITY Имот. Ето как.

Активиране на IDENTITY_INSERT

Можете да замените IDENTITY свойство, като активирате IDENTITY_INSERT . Това ви позволява да вмъквате свои собствени стойности в колона за идентичност.

Ето един пример:

SET IDENTITY_INSERT Artists ON;
INSERT INTO Artists (ArtistId, ArtistName, ActiveFrom)   
VALUES 
  (1001, 'AC/DC','1973-01-11'), 
  (1002, 'Allan Holdsworth','1969-01-01'),
  (1003, 'Buddy Rich','1919-01-01');
SET IDENTITY_INSERT Artists OFF;

В този пример таблицата Artists има колона за идентичност (в този случай ArtistId е колоната за идентичност). За да замените IDENTITY свойството ние просто предхождаме INSERT изявление с SET IDENTITY_INSERT Artists ON . Този израз на T-SQL ви позволява да кажете „Знам, че тази таблица има колона за идентичност, но в този случай вмъкнете my вместо това стойности“.

Имайте предвид, че IDENTITY_INSERT може да се активира само на една маса в даден момент. Затова е добра идея да деактивирате IDENTITY_INSERT веднага след вмъкването. Това го връща в първоначалното му състояние и ви позволява да замените колона за идентичност в друга таблица, ако е необходимо.

Също така, за да активирате IDENTITY_INSERT потребителят трябва да притежава таблицата или да има ALTER разрешение на масата.

Копиране между таблици

Активиране на IDENTITY_INSERT може също да бъде полезно, когато копирате данни между таблици. Например, може да попълвате една таблица от друга.

Ето пример за копиране на данни от таблицата Artists в таблицата Artists_Archive:

SET IDENTITY_INSERT Artists_Archive ON;
INSERT INTO Artists_Archive (ArtistId, ArtistName, ActiveFrom)
  SELECT ArtistId, ArtistName, ActiveFrom
	FROM Artists;
SET IDENTITY_INSERT Artists_Archive OFF;

Едно нещо, което трябва да се отбележи, е, че ако колоната за идентичност има ограничение за първичен ключ, тя ще отхвърли всички стойности, които вече съществуват в таблицата на местоназначението. Така че трябва да сте абсолютно сигурни, че заменянето на колоната за идентичност е това, което определено искате да направите.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхранена процедура - връщане на идентичност като изходен параметър или скалар

  2. Предаване на масив към съхранена процедура на SQL Server

  3. Алгоритъм за избягване на SQL инжектиране на MSSQL сървър от C# код?

  4. Клауза WHERE за тип данни на SQL Server Text

  5. CodeIgniter MSSQL връзка