"We are back" « oc.at

MS SQL Tabellen mergen?

Smut 03.08.2011 - 15:43 2254 12
Posts

Smut

takeover&ether
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16867
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
Bearbeitet von Smut am 04.08.2011, 12:05

meepmeep

Here to stay
Avatar
Registered: Feb 2006
Location: Wien
Posts: 2338
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

takeover&ether
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16867
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
Avatar
Registered: Feb 2006
Location: Wien
Posts: 2338
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

takeover&ether
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16867
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
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16867
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
Bearbeitet von Smut am 03.08.2011, 17:19

Wexo

Little Overclocker
Avatar
Registered: Oct 2004
Location: Garten Österrei..
Posts: 114
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

BOfH
Registered: Jun 2005
Location: Germany
Posts: 2951
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
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16867
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.
Bearbeitet von Smut am 03.08.2011, 18:39

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Also normalerweise geht das so:

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

Polyfire

Addicted
Avatar
Registered: Feb 2007
Location: .
Posts: 415
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).
Bearbeitet von Polyfire am 03.08.2011, 20:51

Smut

takeover&amp;ether
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16867
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

former person of interest
Registered: Sep 2006
Location: -
Posts: 4082
einfach die mssql doku lesen das nächste mal :P
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz