Gelöst: SQL Copy von Tabelleneinträgen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Gelöst: SQL Copy von Tabelleneinträgen

Re: SQL Copy von Tabelleneinträgen

von WSO » Mi, 06.08.2014 12:47

Moin Axel,
super, danke dir.
So geht's. Hat mir viel Kodieraufwand erspart.
:)
Gruss,
Wolfram

Re: SQL Copy von Tabelleneinträgen

von DPunch » Di, 05.08.2014 20:37

Servus
Axel Richter hat geschrieben:das AUTO_INCREMENT wird verwendet, wenn man die betroffene Spalte beim INSERT *gar nicht* angibt.
...oder explizit NULL für die Auto-Wert Spalte übergibt.
WSO hat geschrieben:Hat jemand eine bessere Idee?
Du könntest mal ein

Code: Alles auswählen

stSql = "ALTER TABLE tmpcopyangebotpos MODIFY COLUMN ang_id INT"
oSQL_Statement.executeUpdate(stSql)
vor dem Update probieren - damit entfernst Du die "NOT NULL"-Beschränkung aus ang_id in der kopierten Tabelle.

Re: SQL Copy von Tabelleneinträgen

von Axel Richter » Di, 05.08.2014 12:38

Hallo,

das AUTO_INCREMENT wird verwendet, wenn man die betroffene Spalte beim INSERT *gar nicht* angibt.

Möglichkeit 1:
Die Tabelle tmpcopyangebotpos darf also das Feld ang_id gar nicht enthalten. Also muss das SELECT * beim CREATE TEMPORARY TABLE durch ein SELECT [Feldliste] ersetzt werden.

Möglichkeit 2:
Die Spalte ang_id darf beim INSERT nicht eingefügt werden. Also muss das SELECT * beim INSERT durch ein SELECT [Feldliste] ersetzt werden.

viele Grüße

Axel

Re: SQL Copy von Tabelleneinträgen

von WSO » Mo, 04.08.2014 20:15

Hallo Axel,
ja das ist mir klar und soll auch so sein.
Nur, ich will Mysql ja veranlassen für die zu kopierenden Sätze neue IDs (ungleich Null) automatisch zu vergeben.
Wie soll das anders gehen als mit Nullwert in dem ID-Feld?
Gruss,
WSO

Re: SQL Copy von Tabelleneinträgen

von Axel Richter » Mo, 04.08.2014 16:25

Hallo,
SQL-Fehler:
"ang_id" darf nicht "null" sein
Dieser Fehler bedeutet, dass die Tabelle beim Erzeugen mit der Einschränkung (constraint) NOT NULL für diese Spalte erstellt wurde.

Wenn man trotzdem NULL-Werte dort einfügen konnte, war wohl der Server SQL-Mode weniger strict als jetzt. Siehe http://dev.mysql.com/doc/refman/5.0/en/sql-mode.html.

Die beste Lösung ist aber *nicht* den Server SQL-Mode wieder weniger strict zu machen. Wenn NULL Werte erlaubt sein sollen, dann müssen NULL-Werte erlaubt sein ;-). Überarbeite also die Tabellendefinition, damit diese erlaubt sind.

viele Grüße

Axel

Gelöst: SQL Copy von Tabelleneinträgen

von WSO » So, 03.08.2014 11:29

Moin Zusammen.
Ich habe unter Win 7, LO4.2, mysql 5.6 mit navtive Mysql extension 1.02 folgendes laufen, funtioniert:

Code: Alles auswählen

	' Angebotspositionen kopieren (MySql)
      	stSql = "CREATE TEMPORARY TABLE tmpcopyangebotpos SELECT * FROM tangebot WHERE ang_ako_id = " & iKey
		oSQL_Statement.executeUpdate(stSql)
		
		stSql = "UPDATE tmpcopyangebotpos SET ang_ako_id =" &"'" & iNeu & "', " & "ang_id=null"
		oSQL_Statement.executeUpdate(stSql)
		
		stSql = "INSERT INTO tangebot SELECT * FROM tmpcopyangebotpos"
		oSQL_Statement.executeUpdate(stSql)	
		
		stSql = "COMMIT"
		oSQL_Statement.executeUpdate(stSql)
Die Prim-Key der Tabelle "tangebot" ist "ang_id" und hat AUTOWERT.
Unter Linux mit (Mint 17, Mysql-JDBC) bekomme ich einen SQL-Fehler:
"ang_id" darf nicht "null" sein. Ohne die Zuweisung von "null" gibt es natürlich duplicate value ...
Leider habe ich diese SQL-Syntax häufg verwendet und möchte nur ungerne das issue mit dem woraround
(selct und insert feldweise) umgehen. Ist ja auch wartungsanfälliger.
Hat jemand eine bessere Idee?
Gruss,
WSO

Nach oben