Gå til innhold

C#: MSSQL kopiere rader fra en Db til annen


Anbefalte innlegg

Hei

 

Jeg har en database hvor jeg kjører en select. Resultatet av selecten ønsker jeg å inserte i en annen database. Løsningen jeg har nå er at jeg loop igjennom selecten og inserter for hver rad. Finnes det ikke en bedre løsning, som å sende med hele resultatet inn i en sqlcommand til den nye databasen hvor den inserter eller noe lignende?

 

-Martin

Lenke til kommentar
Videoannonse
Annonse

Det står da lidderlig MSSQL i topic og ikke mysql.

 

Spørsmål 1 er jo om vi snakker 2 databaser på samme server.

 

Hvis dette er tilfellet, og du har en bruker som har tilgang på begge databasene kan du jo bare kjøre spørringen:

 

INSERT INTO dbo.Database1.Tabell(Verdi1, verdi2) SELECT verdi1, verdi2 FROM dbo.Database2.Tabell

 

kindof... :)

Lenke til kommentar

hehe, jeg er mer keen på å skrive koden i c# enn å fikle med PHP script... Men takk for forslag

 

Begge databasene ligger på to ulike servere, så får ikke kjørt INSERT INTO SELECT.

Er det ikke en c# klasse eller funksjon som tar i mot en DataReader f.eks og kjører insert med denne mot spesifisert connection?

 

Edit:

Jeg ser for meg at å loope igjennom selecten for så å inserte hver rad er en tungvindt jobb..... men kanskje det er eneste løsning når db'ene ligger på to servere?

Endret av martin82
Lenke til kommentar
hehe, jeg er mer keen på å skrive koden i c# enn å fikle med PHP script... Men takk for forslag

 

Begge databasene ligger på to ulike servere, så får ikke kjørt INSERT INTO SELECT.

Er det ikke en c# klasse eller funksjon som tar i mot en DataReader f.eks og kjører insert med denne mot spesifisert connection?

 

Edit:

Jeg ser for meg at å loope igjennom selecten for så å inserte hver rad er en tungvindt jobb..... men kanskje det er eneste løsning når db'ene ligger på to servere?

 

Enkleste løsning er vel å dumpe all data til en tekst/xml fil, kopiere filen til den andre serveren og gjøre en bulk insert. Ellers finnes det jo replikering i MS SQL som gjør slikt.

Hvilken versjon av SQL bruker du?

Er det snakk om mye data?

Lenke til kommentar

Spørsmålet er jo da om han har tilgang til admin-verktøy på begge serverne, og kan kjøre DTS-pakker. Og dersom det er Express på en av serverne har det ikke støtte for DTS.

 

Men kjører man fullversjon, har full tilgang, så vil jeg vel også si at DTS er det beste alternativet.

Lenke til kommentar
Det står da lidderlig MSSQL i topic og ikke mysql.

 

Spørsmål 1 er jo om vi snakker 2 databaser på samme server.

 

Hvis dette er tilfellet, og du har en bruker som har tilgang på begge databasene kan du jo bare kjøre spørringen:

 

INSERT INTO dbo.Database1.Tabell(Verdi1, verdi2) SELECT verdi1, verdi2 FROM dbo.Database2.Tabell

 

kindof... :)

 

Du har byttet om catalog og schema. Det skal være database1.dbo. ikke dbo.database1, men det er nok bare en liten leif.

 

Og hvis det er på to forskjellige servere kan du enkelt og greit bruke 4-parts navn i spørringen, enten ved å opprette en linked server, eller ad-hoc ved å bruke OPENDATASOURCE.

 

Linked server:

INSERT INTO Database1.dbo.Tabell(Verdi1, verdi2) SELECT verdi1, verdi2 FROM MySourceServer.Database2.dbo.Tabell

 

OPENDATASOURCE:

INSERT INTO dbo.Database1.Tabell(Verdi1, verdi2) SELECT verdi1, verdi2 FROM from opendatasource('sqlncli','server=MySourceServer;user id=myuser;password=mypwd').database2.dbo.Tabell

Lenke til kommentar

Jeg tror nok kaffenils sitt forslag passer best.

 

Jeg har ikke tilgang til den serveren jeg kopierer fra, kun den jeg kjører asp.net siden fra. Jeg kopierer dataene pga at jeg skal kjøre flere spørringer lokalt framfor å bry den eksterne serveren med dette. Det er ikke en spørring som kjøres ofte.

 

Jeg skal se nærmere på forslaget ditt kaffenils. takker også for andre forslagene:)

Lenke til kommentar
bruker jeg opendatasource foran hver tabell i database 2?

Jeg ser for meg at den lager en ny kobling mot database2 for hver tabell da...

 

Hvis meningen er at du skal koble deg opp mot server2 regelmessig er det bedre å opprette en linked server og bruke denne i spørringene. Se mitt eksempel nr. 1. Enkleste måte å opprette en linked server på, hvis du ikke har gjort det før, er å bruke SSMS.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...