Zum Hauptinhalt springen

Wie deaktiviere ich identity_insert

Identity_insert ist eine Option in SQL Server, mit der Sie beim Einfügen von Datensätzen in eine Tabelle explizit Werte für eine Spalte mit ID angeben können. Normalerweise ist identity_insert aktiviert und generiert automatisch eine eindeutige ID für jeden neuen Datensatz. Es gibt jedoch Fälle, in denen Sie diese automatische Zuweisung deaktivieren und die Identitätswerte selbst angeben müssen. In diesem Artikel werfen wir einen Blick auf verschiedene Techniken und Richtlinien zum Deaktivieren von identity_insert.

In der Regel ist identity_insert für alle Spalten mit dem Datentyp int und numeric aktiviert. Sie können dieses Verhalten jedoch mithilfe bestimmter Anweisungen deaktivieren und die Werte explizit angeben. Eine dieser Anweisungen ist - SET IDENTITY_INSERT. Wenn Sie identity_insert für eine bestimmte Tabelle deaktivieren möchten, müssen Sie die folgende Syntax verwenden:

SET IDENTITY_INSERT table_name ON;

table_name ist der Name der Tabelle, in der Sie die automatische Identitätszuweisung deaktivieren möchten.

Nachdem Sie diese Anweisung ausgeführt haben, können Sie beim Einfügen neuer Datensätze in die Tabelle explizit Werte für Bezeichner angeben. Denken Sie daran, dass Sie die entsprechenden Berechtigungen benötigen, um identity_insert zu deaktivieren.

Identifizieren und Deaktivieren eines Objekts

Manchmal ist es jedoch notwendig, die automatische Identitätsgenerierung für bestimmte Objekte zu deaktivieren. Dies kann beispielsweise nützlich sein, wenn Sie Daten aus einer anderen Datenbank importieren, in der die IDs bereits festgelegt sind, oder wenn Sie Daten aus einer Sicherung einfügen.

Sie können den Befehl verwenden, um die automatische Identitätsgenerierung in einer SQL Server-Datenbank zu deaktivieren SET IDENTITY_INSERT. Sie können Werte manuell in das Feld einfügen, das das Objekt identifiziert.

Beispiel für die Verwendung eines Befehls SET IDENTITY_INSERT:

SET IDENTITY_INSERT table_name ON;INSERT INTO table_name (id, name) VALUES (100, 'John');SET IDENTITY_INSERT table_name OFF;

In diesem Beispiel deaktivieren wir das Autoincrement und fügen manuell den ID-Wert 100 für einen Eintrag mit dem Namen "John" ein. Danach schalten wir das Autoincrement wieder ein.

Es ist wichtig sich daran zu erinnern, dass das Deaktivieren der automatischen Identitätsgenerierung vorübergehend sein sollte und nur dann erfolgt, wenn dies tatsächlich erforderlich ist. Eine dauerhafte Deaktivierung kann zu Duplikaten führen und die Datenintegrität beeinträchtigen.

Verwenden Sie den Befehl SET IDENTITY_INSERT mit Vorsicht und nur bei Bedarf.

Methoden zum Deaktivieren von identity_insert in verschiedenen Datenbanken

Microsoft SQL Server:

1. Verwenden Sie die folgende Syntax, um identity_insert in SQL Server zu deaktivieren:

SET IDENTITY_INSERT table_name OFF;

wo table_name - der Name der Tabelle, in der identity_insert deaktiviert werden soll.

2. Wenn Sie identity_insert für mehrere Tabellen gleichzeitig deaktivieren möchten, können Sie die folgende Syntax verwenden:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL;';

MySQL:

1. In MySQL ist das Deaktivieren von identity_insert nicht erforderlich, da sich das Konzept des automatischen Inkrements von dem in SQL Server unterscheidet. Stattdessen setzt MySQL beim Einfügen eines neuen Datensatzes selbst den nächsten Wert für das Autoincrement-Feld.

Oracle:

1. Um identity_insert in Oracle zu deaktivieren, können Sie die folgende Syntax verwenden:

ALTER TABLE table_name MODIFY (column_name GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL);

wo table_name - der Name der Tabelle und column_name - der Name der Spalte, in der identity_insert deaktiviert ist.

PostgreSQL:

1. In PostgreSQL ist das Deaktivieren von identity_insert nicht erforderlich, da sich das Konzept des automatischen Inkrements von dem in SQL Server unterscheidet. Stattdessen setzt PostgreSQL beim Einfügen eines neuen Datensatzes selbst den nächsten Wert für das Autoincrement-Feld.

Jetzt kennen Sie die verschiedenen Techniken, um identity_insert in verschiedenen Datenbanken zu deaktivieren.

So deaktivieren Sie identity_insert in Microsoft SQL Server

IDENTITY-Anweisung Microsoft SQL Server wird verwendet, um den Spaltenwert automatisch zu erhöhen, um sicherzustellen, dass jede Zeile in der Tabelle eindeutig ist. Manchmal müssen Sie jedoch einen bestimmten Wert manuell in eine Spalte einfügen, die IDENTITY verwendet.

Wenn Sie in SQL Server Werte in eine Spalte einfügen möchten, in der die IDENTITY-Eigenschaft aktiviert ist, müssen Sie die identity vorübergehend deaktivieren (identity_insert).

Führen Sie die folgenden Schritte aus, um identity_insert in Microsoft SQL Server zu deaktivieren:

1. Stellen Sie eine Verbindung zum Server her und wählen Sie die gewünschte Datenbank aus.

2. Deaktivieren Sie identity_insert für die Tabelle, in die Sie Daten einfügen möchten.

SET IDENTITY_INSERT Tabellenname OFF;

3. Fügen Sie die gewünschten Daten in die Tabelle ein.

INSERT INTO Tabellenname (Spalte1, Spalte2, . ) VALUES (Wert1, Wert2, . );

4. Nachdem Sie die Daten eingefügt haben, aktivieren Sie identity_insert wieder.

SET IDENTITY_INSERT Tabellenname ON;

Nach diesen einfachen Schritten können Sie identity_insert in Microsoft SQL Server deaktivieren und erneut aktivieren und die erforderlichen Werte erfolgreich in die Spalte einfügen, in der die IDENTITY-Eigenschaft aktiviert ist.

Wichtige Überlegungen zum Deaktivieren von identity_insert

1. Das Konzept von identity_insert verstehen:

Bevor Sie mit identity_insert beginnen, müssen Sie sein Wesen und seine Eigenschaften vollständig verstehen. Identity_insert ist eine Funktionalität im DBMS, mit der Sie explizit angeben können, welche Werte in eine Spalte mit der Identity-Eigenschaft (Autoincrement) eingefügt werden sollen. Dies kann nützlich sein, wenn Sie bestimmte Werte in eine identity-Spalte einfügen möchten.

2. Überprüfen der Berechtigung zur Verwendung von identity_insert:

Stellen Sie sicher, dass das Konto, mit dem Sie identity_insert deaktivieren möchten, über die entsprechenden Berechtigungen zum Ausführen dieses Vorgangs verfügt. Normalerweise ist das ALTER TABLE-Recht für die Tabelle erforderlich, mit der Sie arbeiten möchten.

3. Definieren einer Tabelle und Spalte:

Bevor Sie den Befehl identity_insert deaktivieren ausführen, müssen Sie die Tabelle und Spalte, mit der Sie arbeiten möchten, genau definieren. Dadurch werden Fehler beim Ausführen einer Abfrage vermieden und die Daten in einer anderen Tabelle geändert.

4. Vorsicht bei der Verwendung der Funktion:

Wenn Sie identity_insert deaktivieren, sollten Sie besonders vorsichtig sein, da dies die Datenintegrität beeinträchtigen kann. Wenn Sie identity_insert deaktivieren, können Sie Werte einfügen, die möglicherweise nicht eindeutig sind oder die Tabelleneinschränkungen nicht erfüllen. Stellen Sie sicher, dass die eingefügten Werte Ihren Anforderungen entsprechen und in Zukunft keine Probleme verursachen.

5. Aktivieren von identity_insert:

Nachdem Sie die erforderlichen Vorgänge ausgeführt haben, um identity_insert zu deaktivieren, müssen Sie sicherstellen, dass sein Wert in seinen ursprünglichen Zustand zurückgekehrt ist. Die Aktivierung von identity_insert muss nach Abschluss der Vorgänge erfolgen, um Datenverluste und Probleme beim Einfügen von Datensätzen in die Tabelle zu vermeiden.

Alternative Möglichkeiten zum Bearbeiten von identity-Spalten, ohne identity_insert zu deaktivieren

Wenn Sie die Werte der identity-Spalten in einer Tabelle ändern möchten, können Sie mehrere alternative Methoden verwenden, ohne den Parameter identity_insert zu deaktivieren. Dies wird helfen, potenzielle Probleme beim Ausfüllen von Daten und bei der Aufrechterhaltung der Integrität zu vermeiden.

1. Verwenden Sie das Aktualisierungsschema für Teilwertgruppen.

  • Teilen Sie die Daten in Gruppen auf, die den Identitätsspaltenbereichen ähneln.
  • Aktualisieren Sie die Werte in jeder Gruppe, um Schnittpunkte und Konflikte zu vermeiden.

2. Verwenden Sie temporäre Tabellen.

  • Erstellen Sie eine temporäre Tabelle mit denselben Spalten wie die Zieltabelle.
  • Kopieren Sie die Daten aus der Zieltabelle in eine temporäre Tabelle.
  • Aktualisieren Sie die Werte in der temporären Tabelle, um Konflikte mit Identitätsspalten zu vermeiden.
  • Kopieren Sie die Daten aus der temporären Tabelle zurück in die Zieltabelle und speichern Sie die Identitätsspalten.

3. Verwenden Sie das Einfügen und Löschen von Zeilen.

  • Fügen Sie neue Zeilen ein, ohne Identitätsspalten anzugeben.
  • Löschen Sie die alten Zeilen mit den in Konflikt stehenden Identitätsspaltenwerten.
  • Aktualisieren Sie die erforderlichen Werte in den neuen Zeilen.

4. Verwenden Sie temporäre Tabellen und INSERT-, UPDATE- und DELETE-Sets.

  • Erstellen Sie eine temporäre Tabelle mit denselben Spalten wie die Zieltabelle.
  • Kopieren Sie die Daten aus der Zieltabelle in eine temporäre Tabelle.
  • Aktualisieren Sie die Werte in der temporären Tabelle, um Konflikte mit Identitätsspalten zu vermeiden.
  • Löschen Sie Zeilen mit in Konflikt stehenden Identitätsspaltenwerten aus der Zieltabelle.
  • Verwenden Sie die INSERT-, UPDATE- oder DELETE-Operationen, um die Daten in der Zieltabelle zu aktualisieren.

Wählen Sie je nach Ihrer spezifischen Situation und Ihren Datenanforderungen die am besten geeignete Methode aus. Es ist immer notwendig, alle Datenänderungen sorgfältig zu überprüfen und zu testen, um mögliche Probleme zu vermeiden.

Wie kann ich überprüfen, ob identity_insert in der Datenbank aktiviert ist

Wenn Sie herausfinden müssen, ob die identity_insert-Eigenschaft in der Datenbank aktiviert ist, können Sie den folgenden Befehl ausführen:

SELECT OBJECT_NAME(object_id) AS TableName, name AS IdentityInsertStatusFROM sys.columnsWHERE is_identity = 1

Mit diesem Befehl können Sie eine Liste der Tabellen abrufen, in denen die identity-Eigenschaft festgelegt ist. Das Feld IdentityInsertStatus gibt an, ob die identity_insert-Eigenschaft für die entsprechende Tabelle aktiviert (1) oder deaktiviert (0) ist.

Alternativ können Sie den Status der identity_insert-Eigenschaft für eine einzelne Tabelle überprüfen. Führen Sie dazu den folgenden Befehl aus:

DECLARE @tableName NVARCHAR(128) = 'TableName'DECLARE @isIdentityEnabled BITSELECT @isIdentityEnabled = is_identity from sys.columnsWHERE object_id = OBJECT_ID(@tableName) AND name = 'ColumnName'SELECT CASE WHEN @isIdentityEnabled = 1 THEN 'Включено' ELSE 'Отключено' END AS IdentityInsertStatus

Ersetzen Sie 'TableName' durch den Tabellennamen und 'ColumnName' durch den Spaltennamen mit der identity-Eigenschaft. Sie erhalten den Status der identity_insert-Eigenschaft für die angegebene Tabelle.