MS SQL Tabellen mergen?

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/ms-sql-tabellen-mergen_225457/page_1 - zur Vollversion wechseln!


Smut schrieb am 03.08.2011 um 15:43

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. :D
derzeit will ich das probleme aber nur fixen :p


meepmeep schrieb am 03.08.2011 um 15:49

kA ob das bei mssql funktioniert, aber das einfachste wär imho ein dblink mit anschließendem

Code: SQL
select * into tabelle from tabelle@backupdb where id between 1 and 10000


Smut schrieb am 03.08.2011 um 15:51

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 schrieb am 03.08.2011 um 15:55

alternativ könntest du dir auf der backupdb einfach die ausgabe von

Code: SQL
 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 schrieb am 03.08.2011 um 15:59

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 schrieb am 03.08.2011 um 17:15

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:

Code: SQL
select * into [testtable]
from [table_temp]
where id between 1 and 10000


Wexo schrieb am 03.08.2011 um 17:38

Zitat von Smut
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:
Code: SQL
select * into [testtable]
from [table_temp]
where id between 1 and 10000

into ist ziemlich sicher rein PL/SQL. Würd eher sowas versuchen:
Code: SQL
 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 schrieb am 03.08.2011 um 17:48

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 schrieb am 03.08.2011 um 18:27

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?

Zitat von Crash Override
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.


that schrieb am 03.08.2011 um 20:33

Also normalerweise geht das so:

Code: SQL
INSERT INTO Zieltabelle SELECT * from Quelltabelle WHERE whatever
.


Polyfire schrieb am 03.08.2011 um 20:44

Wenn man eine Identity Spalte mit inserten will dann muss man vorher schreiben:

Code: SQL
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).


Smut schrieb am 04.08.2011 um 12:05

danke für die hilfe, ich habs jetzt mit folgendem statement hinbekommen:

Code: SQL
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-1

und so hat dann das statement endlich funktioniert.
thx für die hilfe - sind schon ganz aufregend diese datenbanken :p


Nico schrieb am 04.08.2011 um 12:07

einfach die mssql doku lesen das nächste mal :P




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025