it-swarm.com.de

INSERT-Datensatz in SQL-Tabelle mit IDENTITY-Spalte

ich habe diese SQL-Tabelle

CREATE TABLE Notes(
    NoteID [int] IDENTITY(1,1) NOT NULL,
    NoteTitle [nvarchar](255) NULL,
    NoteDescription [nvarchar](4000) NULL
) CONSTRAINT [PK_Notes] PRIMARY KEY CLUSTERED 
(
    NoteID ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,
 ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

Und ich möchte Datensätze aus einer temporären Tabelle einschließlich der NoteID (mit SQL-Abfrage) kopieren.

das ist mein Drehbuch:

SET IDENTITY_INSERT Notes OFF

INSERT INTO Notes (NoteID, NoteTitle,NoteDescription)
SELECT NoteID, NoteTitle,NoteDescription from Notes_Temp

SET IDENTITY_INSERT Notes ON

mit diesem Skript erhalte ich eine Fehlermeldung:

Cannot insert explicit value for identity column in table 'Notes' when IDENTITY_INSERT is set to OFF.

gibt es eine andere Möglichkeit zum Einfügen von Datensätzen in eine Tabelle mit Identitätsspalte mithilfe einer SQL-Abfrage?

17
Eytch

Ändern Sie die AUS und EIN um

SET IDENTITY_INSERT Notes ON

INSERT INTO Notes (NoteID, NoteTitle,NoteDescription)
SELECT NoteID, NoteTitle,NoteDescription from Notes_Temp

SET IDENTITY_INSERT Notes OFF
29
Adriaan Stander
SET IDENTITY_INSERT Notes ON

INSERT INTO Notes
/*Note the column list is REQUIRED here, not optional*/
(NoteID, NoteTitle,NoteDescription)
SELECT NoteID, NoteTitle,NoteDescription from Notes_Temp

SET IDENTITY_INSERT Notes OFF

Sie fügen Werte für NoteId ein, bei der es sich um eine Identitätsspalte handelt. Sie können die Identitäts-Einfügung für die Tabelle wie folgt aktivieren, um Ihre eigenen Identitätswerte anzugeben.

6
Ahmed

Vermutlich verwenden Sie SQL Server (sagen Sie nicht) und haben die Bedeutung und den Zweck von IDENTITY_INSERT falsch verstanden. Im Allgemeinen dürfen Sie den Wert einer IDENTITY-Spalte nicht explizit festlegen, aber indem Sie IDENTITY_INSERT für eine Tabelle auf ON setzen, können Sie solche Einfügungen vorübergehend zulassen.

2
Old Pro