Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So fügen Sie Werte in eine IDENTITY-Spalte in SQL Server ein

Wenn Sie jemals versucht haben, Werte in eine Identitätsspalte in SQL Server einzufügen, ist Ihnen möglicherweise ein Fehler wie dieser aufgefallen:

Es kann kein expliziter Wert für die Identitätsspalte in die Tabelle „Künstler“ eingefügt werden, wenn IDENTITY_INSERT auf OFF gesetzt ist.

Das ist normal. Eine Identitätsspalte gibt es aus einem bestimmten Grund. Es füllt die Spalte automatisch mit einem inkrementierenden Wert für jede eingefügte Zeile. Daher müssen Sie keinen Wert in diese Spalte einfügen.

Aber manchmal tun Sie es müssen einen Wert in eine Identitätsspalte einfügen. Beispielsweise könnten Sie die Datenbank mit Daten füllen, die ihre eigenen Identitätswerte beibehalten müssen. In diesem Fall müssen Sie die IDENTITY überschreiben Eigentum. So geht's.

IDENTITY_INSERT aktivieren

Sie können die IDENTITY überschreiben -Eigenschaft, indem Sie IDENTITY_INSERT aktivieren . Dadurch können Sie Ihre eigenen Werte in eine Identitätsspalte einfügen.

Hier ist ein Beispiel:

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;

In diesem Beispiel hat die Artists-Tabelle eine Identitätsspalte (in diesem Fall ist ArtistId die Identitätsspalte). Um die IDENTITY zu überschreiben -Eigenschaft stellen wir einfach INSERT voran Anweisung mit SET IDENTITY_INSERT Artists ON . Mit dieser T-SQL-Anweisung können Sie sagen:„Ich weiß, dass diese Tabelle eine Identitätsspalte hat, aber in diesem Fall fügen Sie my ein stattdessen Werte“.

Beachten Sie, dass IDENTITY_INSERT kann jeweils nur für eine Tabelle aktiviert werden. Daher ist es eine gute Idee, IDENTITY_INSERT zu deaktivieren unmittelbar nach dem Einsetzen. Dadurch wird der ursprüngliche Zustand wiederhergestellt, und Sie können bei Bedarf eine Identitätsspalte in einer anderen Tabelle überschreiben.

Auch um IDENTITY_INSERT zu aktivieren der Benutzer muss Eigentümer der Tabelle sein oder ALTER haben Erlaubnis auf dem Tisch.

Kopieren zwischen Tabellen

Aktivieren von IDENTITY_INSERT kann auch nützlich sein, wenn Sie Daten zwischen Tabellen kopieren. Beispielsweise könnten Sie eine Tabelle aus einer anderen füllen.

Hier ist ein Beispiel für das Kopieren von Daten aus der Artists-Tabelle in die Artists_Archive-Tabelle:

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;

Beachten Sie Folgendes:Wenn die Identitätsspalte eine Primärschlüsseleinschränkung aufweist, werden alle Werte abgelehnt, die bereits in der Zieltabelle vorhanden sind. Sie müssen sich also absolut sicher sein, dass Sie die Identitätsspalte auf jeden Fall überschreiben möchten.