533 Stimmen

Expliziter Wert für Identitätsspalte in Tabelle 'table' kann nicht eingefügt werden, wenn IDENTITY_INSERT auf OFF gesetzt ist

Ich habe den folgenden Fehler, wenn ich das folgende Skript ausführe. Worum handelt es sich bei dem Fehler und wie kann er behoben werden?

Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)

Fehler:

Server: Msg 544, Ebene 16, Zustand 1, Zeile 1

Es kann kein expliziter Wert für die Identitätsspalte in der Tabelle 'table' eingefügt werden, wenn IDENTITY_INSERT auf OFF gesetzt ist.

99voto

Umang Patwa Punkte 2439

Wenn Sie diesen Fehler auf dem SQL-Server erhalten, führen Sie einfach diese Abfrage aus

SET IDENTITY_INSERT tableName ON

Dies funktioniert nur für eine einzige Tabelle der Datenbank z.B. Wenn der Tabellenname student dann sieht die Abfrage wie folgt aus:

SET IDENTITY_INSERT student ON

Wenn Sie diesen Fehler in Ihrer Webanwendung erhalten oder das Entity-Framework verwenden, führen Sie zuerst diese Abfrage auf dem SQL-Server aus und aktualisieren Sie Ihre Entitätsmodell ( .edmx file ) und bauen Sie Ihr Projekt und dieser Fehler wird behoben

95voto

Wael Dalloul Punkte 21012

Geben Sie keinen Wert für OperationID ein, da dieser automatisch generiert wird. Versuchen Sie dies:

Insert table(OpDescription,FilterID) values ('Hierachy Update',1)

46voto

HLGEM Punkte 91543

Seien Sie sehr vorsichtig, wenn Sie IDENTITY_INSERT auf ON setzen. Dies ist eine schlechte Praxis, es sei denn, die Datenbank befindet sich im Wartungsmodus und ist auf Einzelbenutzer eingestellt. Dies wirkt sich nicht nur auf Ihre Einfügung aus, sondern auch auf die Einfügungen anderer Personen, die versuchen, auf die Tabelle zuzugreifen.

Warum versuchen Sie, einen Wert in ein Identitätsfeld einzugeben?

10voto

Jeder Kommentar über SQL, aber was geschah in EntityFramework? Ich verbrachte das Lesen der ganzen Beitrag und niemand gelöst EF. Also nach ein paar Tagen eine Lösung gefunden: EF Core im Zusammenhang mit der Erstellung des Modells gibt es eine Anweisung wie diese: modelBuilder.Entity<Cliente>(entity => { entity.Property(e => e.Id).ValueGeneratedNever();

dies produziert den Fehler auch, Lösung: Sie müssen durch ValueGeneratedOnAdd() und seine Werke zu ändern!

8voto

iowatiger08 Punkte 1852

Wenn Sie liquibase zur Aktualisierung Ihres SQL-Servers verwenden, versuchen Sie wahrscheinlich, einen Datensatzschlüssel in ein autoIncrement-Feld einzufügen. Wenn Sie die Spalte aus der Einfügung entfernen, sollte Ihr Skript funktionieren.

<changeSet id="CREATE_GROUP_TABLE" >
    <createTable tableName="GROUP_D">
        <column name="GROUP_ID" type="INTEGER" autoIncrement="true">
            <constraints primaryKey="true"/>
        </column>
    </createTable>
</changeSet>

<changeSet id="INSERT_UNKNOWN_GROUP" >
    <insert tableName="GROUP_D">    

        <column name="GROUP_ID" valueNumeric="-1"/>
 ...
    </insert>
</changeSet>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X