none
Insert or Update RRS feed

  • Domanda

  • Buongirono a tutti.

    Avrei la necessità di trasferire dei record da una tabella ad un altra (a dire il vero sono 5 tabelle ma comunque credo cambi poco)

    le due tabelle sono su due db diversi e su due server differenti (hanno ip diversi ma comunque si vedono tra di loro), stessa struttura e stesso nome della tabella e dei campi

    Sostanzialmente vorrei spostare i dati dal Primo server al Secondo server aggiungendo nel secondo i record che sono presenti nel primo ma non nel secondo.

    Non vorrei fare un delete dei record e poi fare un insert.

    mi piacerebbe fare una sorta di find by PK e se non c'è un insert altrimenti un update.

    Grazie

    Alessio

    martedì 24 maggio 2011 07:59

Tutte le risposte

  • prova con INSERT INTO (campi ....) SELECT .. ... ... FROM .. la lanci sul server di destinazione. Il problema ora è che devi fare la parte sotto "select .." puntando all'altro server origine dei dati prova a vedere se riesci ad usare OPENDATASOURCE('SQLOLEDB','Data Source=(..);User ID=xxxx;Password=yyyy').nomedb.dbo.tabella
    martedì 24 maggio 2011 08:51
  • Avrei la necessità di trasferire dei record da una tabella ad un altra (a dire il vero sono 5 tabelle ma comunque credo cambi poco)

    le due tabelle sono su due db diversi e su due server differenti (hanno ip diversi ma comunque si vedono tra di loro), stessa struttura e stesso nome della tabella e dei campi

    Sostanzialmente vorrei spostare i dati dal Primo server al Secondo server aggiungendo nel secondo i record che sono presenti nel primo ma non nel secondo.

    Non vorrei fare un delete dei record e poi fare un insert.

    mi piacerebbe fare una sorta di find by PK e se non c'è un insert altrimenti un update.


    Ciao Alessio,

    Prima di tutto puoi definire un linked server sull'istanza di destinazione che punta a quella di origine, referenziando gli oggetti remoti utilizzando il four-part name (linked server.database.schema.oggetto). In alternativa puoi eseguire query eterogenee mediante OPENROWSET o OPENDATASOURCE.

    Se utilizzi SQL Server 2008 puoi servirti del comando MERGE per recuperare i dati dalle tabelle sorgente e "fonderli" con quelli delle corrispettive tabelle di destinazione; se utilizzi versioni antecedenti alla 2008 puoi fare la stessa cosa mediante OUTER JOIN ed eseguendo INSERT, UPDATE e/o DELETE singolarmente.

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.technet.microsoft.com/Forums/it-IT/sqlserverit
    martedì 24 maggio 2011 14:08
    Moderatore