MS SQL Tabellen mergen?
Smut 03.08.2011 - 15:43 2254 12
Smut
takeover&ether
|
kurze frage, ich bin blutiger Anfänger im Umgang mit MS SQL Server 2008 und dem Management Studio 10. Was ich gemacht habe: delete from table where id between 1 and 10000 gut, das war nicht so schlau und jetzt brauch ich die 10.000 zeilen wieder. ich hab die komplette tabelle noch auf der backup datenbank. ich kann sie aber nicht komplett neu einspielen, da in der zwischenzeit ein paar inserts passiert sind. ich muss das ganze also wieder zusammenfügen. mangels erfahrung und mangels bisherigem interesse an datenbanken hab ich noch wenig quellen wo ich mich erkundigen kann. ich bin dankber über hilfestellungen und auch links zum thema MS SQL, ich hab auch vor mich in zukunft mehr einzulesen.  derzeit will ich das probleme aber nur fixen
Bearbeitet von Smut am 04.08.2011, 12:05
|
meepmeep
Here to stay
|
kA ob das bei mssql funktioniert, aber das einfachste wär imho ein dblink mit anschließendem select * into tabelle from tabelle@backupdb where id between 1 and 10000
|
Smut
takeover&ether
|
jo, die meisten probleme hab ich eh mit dem MS sql studio und dem DB-connect wizzard, haha. sonst hätte ich eh gleich die tabelle im vorhinein gesichert, aber hab auch im google nix brauchbares gefunden wie das easy geht.
edit: aber zur DB kann ich eh verbinden, werds dann gleich ausprobieren. thx für den tipp.
|
meepmeep
Here to stay
|
alternativ könntest du dir auf der backupdb einfach die ausgabe von select * from table where id between 1 and 10000
als insertscript oder excel exportieren lassen und in deiner db importieren. aber kA ob das mssql studio so einen dataexport/import kann.
|
Smut
takeover&ether
|
import von excel kanns, aber export des resultats eines select-satements bekomm ich nur per CSV hin.
edit: zuerst kompletten export in excel und dann die überflüssigen datensätze löschen wird leider nicht hinhaun bei 1,4mio zeilen (nehme ich an).
|
Smut
takeover&ether
|
gut, ich hab jetzt beide tabellen in einer datenbank und will sie jetzt mergen, der ansatz von meepmeep funktioniert leider nicht. kann es sein, dass MS SQL das gar nicht kann? fehlermeldung ist folgende: There is already an object named 'testtable' in the database. statement: select * into [testtable]
from [table_temp]
where id between 1 and 10000
Bearbeitet von Smut am 03.08.2011, 17:19
|
Wexo
Little Overclocker
|
gut, ich hab jetzt beide tabellen in einer datenbank und will sie jetzt mergen, der ansatz von meepmeep funktioniert leider nicht. kann es sein, dass MS SQL das gar nicht kann?
fehlermeldung ist folgende:
There is already an object named 'testtable' in the database.
statement:
select * into [testtable]
from [table_temp]
where id between 1 and 10000
into ist ziemlich sicher rein PL/SQL. Würd eher sowas versuchen: insert into zieltabelle select spalte1, spalte2,... from quelltabelle
was jedoch nur hinhaun wird wenn die spaltenanzahl/-reihenfolge gleich is  ansonsten kommst wohl um manuelle Spaltenangaben nicht herum...
|
Crash Override
BOfH
|
ist MSSQL wirklich so katastrophal? Den ersten Select auf der Backupdb der relevanten einträge in eine csv, danach ein csv import in der Echtdatenbank und fertig. Sö würd ich es quick and dirty auf mysql machen...
|
Smut
takeover&ether
|
Die Tabelle ist 1:1 nur dass halt die Einträge 0-xxx fehlen, diese Spalte ist auch zugleich der primärschlüssel. zum Vorschlag von wexo: mit * kann ich nicht arbeiten? Das heißt ich muss alle spalten angeben, was eigentlich auch kein Problem ist. Nur was mach ich jetzt mit der ID Spalte die wie gesagt der PK ist? ist MSSQL wirklich so katastrophal? Den ersten Select auf der Backupdb der relevanten einträge in eine csv, danach ein csv import in der Echtdatenbank und fertig. Sö würd ich es quick and dirty auf mysql machen... Ja ist auch eine Möglichkeit.
Bearbeitet von Smut am 03.08.2011, 18:39
|
that
Hoffnungsloser Optimist
|
Also normalerweise geht das so: INSERT INTO Zieltabelle SELECT * from Quelltabelle WHERE whatever
.
|
Polyfire
Addicted
|
Wenn man eine Identity Spalte mit inserten will dann muss man vorher schreiben: set identity_insert <table> on
/edit: Eine einfache Moeglichkeit ist auch ueber SSIS. Dazu das "Business Intelligence Dev Studio" (genauer name weiss ich jetzt nicht, heisst aber so aehnlich) starten, und dort ein SSIS Projekt anlegen. Dann machst du dort einen "Dataflow Task" mit einer OLEDB Source und einer OLDEDB Target. Du brauchst jeweils Datenquellen fuer die Src und Target DB, und kannst dann bei der OLEDB Source einfach eine Query eingeben die alle Zeilen ausspuckt die benoetigt werden. Dann einfach von der Src zum Target eine Linie ziehen, beim Target in die Properties gehen und schauen ob das Mapping passt. Auch hier musst du wahrscheinlich "Enable identity insert" aktivieren (ist glaub ich eine checkbox beim Target).
Bearbeitet von Polyfire am 03.08.2011, 20:51
|
Smut
takeover&ether
|
danke für die hilfe, ich habs jetzt mit folgendem statement hinbekommen: insert into [table_new]
select* from [table_backup]
where id between 1428734 and 1429599
das problem war einfach, dass ich den PK zwar im designer rausgenommen habe, die änderung aber nicht gespeichert wurde (anfängerfehler nr. 2). als ich dann speichern wollte ist das zunächst auch nicht gegangen, da der Manager "Saving changes not permitted" ausgespuckt hat. das ganze hab ich dann einfach in der gui deaktiviert: http://www.bidn.com/blogs/BrianKnig...not-permitted-1und so hat dann das statement endlich funktioniert. thx für die hilfe - sind schon ganz aufregend diese datenbanken
|
Nico
former person of interest
|
einfach die mssql doku lesen das nächste mal :P
|