MySQL: Problem beim Tabelle kopieren?
Ich habe eine Methode, welche eine Tabelle in eine andere Tabelle kopieren soll.
cn1 = new SqlConnection(cn_string);
cn1.Open();
string sqltext = "SET IDENTITY_INSERT Wochenplan ON;";
cmd = new SqlCommand(sqltext, cn1);
cmd.ExecuteNonQuery();
sqltext = "INSERT INTO Wochenplan ([Text]) SELECT [Text] FROM NächsteWoche;";
cmd = new SqlCommand(sqltext, cn1);
cmd.ExecuteNonQuery(); //Hier der Fehler
sqltext = "SET IDENTITY_INSERT Wochenplan OFF;";
cmd = new SqlCommand(sqltext, cn1);
cmd.ExecuteNonQuery();
Zuvor wurde der Inhalt der Tabelle Wochenplan entfernt.
cn1 = new SqlConnection(cn_string);
cn1.Open();
string sqltext = "DELETE FROM Wochenplan";
cmd = new SqlCommand(sqltext, cn1);
cmd.ExecuteNonQuery();
Nun bekomme ich allerdings beim Ausführen in der Methode vom Kopieren einen Fehler in Zeile 10:
"Explicit value must be specified for identity column in table 'Wochenplan' either when IDENTITY_INSERT is set to ON or when a replication user is inserting into a NOT FOR REPLICATION identity column."
Wie behebe ich das Problem?
2 Antworten
Mit
SET IDENTITY_INSERT Wochenplan ON;
gibst du der SQL-Datenbank zu verstehen, dass du bei folgenden INSERT-Anfragen das IDENTITY-Feld selbst setzen möchtest. Normalerweise wird dieser Wert automatisch von der Datenbank generiert. Wenn du bspw. eine ID-Spalte hast, die bei jedem neuen Eintrag um einen Zähler hochgezählt wird, brauchst du dich nicht darum kümmern.
Ein konkretes Beispiel:
CREATE TABLE [dbo].[Person] (
[ID] INT NOT NULL IDENTITY(1, 1),
[FirstName] NVARCHAR(120) NOT NULL,
[LastName] NVARCHAR(120) NOT NULL
)
Wenn du für diese Datenbanktabelle neue Einträge anlegen möchtest, reicht die Angabe von FirstName und LastName.
INSERT INTO [dbo].[Person] ([FirstName], [LastName])
VALUES ('Bud', 'Spencer')
INSERT INTO [dbo].[Person] ([FirstName], [LastName])
VALUES ('Terence', 'Hill')
Wenn du diese Autogeneration der ID jedoch deaktivierst, musst du sie selbst setzen.
INSERT INTO [dbo].[Person] ([ID], [FirstName], [LastName])
VALUES (1, 'Bud', 'Spencer')
INSERT INTO [dbo].[Person] ([ID], [FirstName], [LastName])
VALUES (2, 'Terence', 'Hill')
Entferne also entweder diese beiden Anfragen:
string sqltext = "SET IDENTITY_INSERT Wochenplan ON;";
cmd = new SqlCommand(sqltext, cn1);
cmd.ExecuteNonQuery();
// ...
sqltext = "SET IDENTITY_INSERT Wochenplan OFF;";
cmd = new SqlCommand(sqltext, cn1);
cmd.ExecuteNonQuery();
oder reiche bei jedem INSERT einen eigenen gültigen Wert für deine IDENTITY-Spalte mit an die Datenbank.
Guck dir doch einfach an was es macht im SQL ... oder weisst Du gar nciht was du da eigentlich machst ?
http://www.sql-server-helper.com/error-messages/msg-545.aspx
sagt ja genau was das problem ist . Das musst Du jetzt nur noch verstehen .
Ich sag ja, du verstehst SQL Server gar nicht , aber darfst Leider schon programmieren damit . Leider Leider ist das heut zu tage normal . Dementsprechend sieht das in der IT auch aus . Früher hat man das im Team mit einem gemacht der wirklich Ahnung hat und sich auch im SQL die Ausgabe anguckt was passiert , also echtes debugging betreibt .
Also eigentlich bin ich 16 und bring mir das grad ein bisschen selber als Hobby bei aber ja.
am besten man hilft nicht weiter , dem frager gehts nicht um teamarbeit sondern ganz alleine darum sich selber zu verwirklichen . verstehen ist da ausgeschlossen .
Erhlich gesagt hat mir sas nicht geholfen. Dort geht es ja um eine einfach Insert Anweisung hier wird ja eine Tabelle kopiert.