Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wstawić wartości do kolumny IDENTITY w SQL Server

Jeśli kiedykolwiek próbowałeś wstawić wartości do kolumny tożsamości w SQL Server, możesz zobaczyć następujący błąd:

Nie można wstawić wyraźnej wartości dla kolumny tożsamości w tabeli „Artyści”, gdy IDENTITY_INSERT jest ustawione na WYŁ.

To normalne. Kolumna tożsamości jest tam z jakiegoś powodu. Automatycznie wypełnia kolumnę rosnącą wartością dla każdego wstawianego wiersza. Dlatego nie ma potrzeby wstawiania wartości do tej kolumny.

Czasami jednak robisz trzeba wstawić wartość do kolumny tożsamości. Na przykład możesz zapełniać bazę danych danymi, które muszą zachować własne wartości tożsamości. W takim przypadku musisz zastąpić IDENTITY własność. Oto jak.

Włącz IDENTITY_INSERT

Możesz zastąpić IDENTITY właściwość, włączając IDENTITY_INSERT . Pozwala to wstawić własne wartości do kolumny tożsamości.

Oto przykład:

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;

W tym przykładzie tabela Artists ma kolumnę tożsamości (w tym przypadku ArtistId jest kolumną tożsamości). Aby zastąpić IDENTITY po prostu poprzedzamy INSERT oświadczenie z SET IDENTITY_INSERT Artists ON . Ta instrukcja T-SQL pozwala powiedzieć „Wiem, że ta tabela ma kolumnę tożsamości, ale w tym przypadku wstaw mój zamiast tego wartości”.

Pamiętaj, że IDENTITY_INSERT można włączyć tylko na jednym stole naraz. Dlatego dobrym pomysłem jest wyłączenie IDENTITY_INSERT zaraz po wstawieniu. To przywraca go do pierwotnego stanu i pozwala w razie potrzeby zastąpić kolumnę tożsamości w innej tabeli.

Ponadto, aby włączyć IDENTITY_INSERT użytkownik musi być właścicielem tabeli lub mieć ALTER pozwolenie na stole.

Kopiowanie między tabelami

Włączanie IDENTITY_INSERT może być również przydatny podczas kopiowania danych między tabelami. Na przykład możesz zapełniać jedną tabelę drugą.

Oto przykład kopiowania danych z tabeli Artists do tabeli 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;

Należy zauważyć, że jeśli kolumna tożsamości ma ograniczenie klucza podstawowego, odrzuci wszystkie wartości, które już istnieją w tabeli docelowej. Musisz więc mieć absolutną pewność, że nadpisanie kolumny tożsamości jest tym, co zdecydowanie chcesz zrobić.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATEDIFF() zwraca nieprawidłowe wyniki w programie SQL Server? Przeczytaj to.

  2. Błąd logowania do programu SQL Server:logowanie nie powiodło się dla użytkownika „NT AUTHORITY\SYSTEM”

  3. Użycie SqlParameter w klauzuli SQL LIKE nie działa

  4. Jak używać OBJECT_ID() na obiektach między bazami danych w SQL Server

  5. Agregacja ciągów na przestrzeni lat w SQL Server