INSERT von Tabelle 2 in Tabelle 1

Werbung:
Ok, danke akretschmer. Dann muss ich mich wohl anders umsehen.
Fehler ignorieren wird ja dann sicher auch nicht möglich sein.

Dein Problem sind, wie schon gesagt, falsche Datentypen, stimmts? Es knallt bei der Konvertierung von einem String nach Int, oder? Du könntest mittels WHERE-Condition ja filtern, welche Strings konvertierbar sind.
 
Mein Problem sind doppelte Einträge im Namen
(Cannot insert duplicate key row in object 'dbo.CUSTOMER' with unique index 'CS_NAME'.)

Ich darf aber die SQL-Tabelle zwecks Programmkompatibilität nicht editieren.
Ich könnte zwar die doppelten Einträge per Hand löschen, jedoch soll das Script in Zukunft selbstständig laufen und somit die Fehler ignorieren, oder den INSERT fortsetzen.
 
gibt es vergleichbares wie INSERT IGNORE INTO (mysql) auch für SQL?

Nicht wirklich, aber andere Mittel. SQL arbeitet mit Mengen, diese kann man vergleichen, kann schauen, ob es Überscheidungen gibt etc. Kurzdemo:

Code:
test=# create table source (name text);
CREATE TABLE
Time: 4,170 ms
test=*# create table destination (name text unique);
NOTICE:  CREATE TABLE / UNIQUE will create implicit index "destination_name_key" for table "destination"
CREATE TABLE
Time: 46,440 ms
test=*# insert into destination values ('name1');
INSERT 0 1
Time: 0,475 ms
test=*# insert into destination values ('name3');
INSERT 0 1
Time: 0,156 ms
test=*# insert into source select 'name' || s::text from generate_Series(1,5) s;
INSERT 0 5
Time: 58,336 ms
test=*# insert into destination select name from source except select name from destination;
INSERT 0 3
Time: 0,600 ms
test=*#

Und, was ist nun in destination drin?

Code:
test=*# select * from destination;
 name
-------
 name1
 name3
 name4
 name5
 name2
(5 rows)

Was passiert, wenn ich das insert von oben wiederhole?

Code:
test=*# insert into destination select name from source except select name from destination;
INSERT 0 0
Time: 0,299 ms

Andreas
 
Sorry mein Fehler,

insert into source select 'name' || s::text from generate_Series(1,5) s;
meinte ich eigentlich.

Ach so. Dann nehmen wir mal den einen Teil und schauen ihn uns an:

Code:
test=*# select 'name' || s::text from generate_Series(1,5) s;
 ?column?
----------
 name1
 name2
 name3
 name4
 name5
(5 rows)

Muß ich den Insert-Teil jetzt auch noch erklären? ;-)

Andreas
 
Danke, hast du vlt. noch eine Idee Zweck des neuen Fehlers?

Msg 213, Level 16, State 1, Line 9

Insert Error: Column name or number of supplied values does not match table definition.
 
Werbung:
Du hast vermutlich INSERT INTO table gemacht ohne die Spalten anzugeben, also INSERT INTO table (spalte1,spalte2,[...]) VALUES (wert1,wert2,[...]) oder du hast eine ungleiche Anzahl von Werten bzw. Spalten.
 
Zurück
Oben