none
Trasferimento dati fra due Database RRS feed

  • Domanda

  • Buongiorno a tutti e buone feste, premetto che non sono certo un esperto...anzi...sono un autodidatta con molte lacune...quindi vi chiedo un po di pazienza, ma veniamo al mio problema:

    ammettiamo d'avere due database creati in LocalDB in T-SQL, questi due database hanno delle tabelle con lo stesso nome e gli stessi campi, ma sul secondo database sono presenti delle tabelle non presenti sul primo ed alcune tabelle che sono presenti su entrambe quella sul secondo ha qualche campo in più es:

    DB1-------------------------------------->------------------------DB2

    Tab1-------------------------------------->-----------------------Tab1

    Campi(10)-----------(stessi nomi)------>-----------------------Campi(10)

    Tab2--------------------------------------->----------------------Tab2

    Campi(5)------------(i 5 campi stessi nomi)---->---------------Campi(10)

                                                                                             Tab3

                                                                                             Campi(nn)

    Quindi copiare i dati dalla tab1 del primo database nella tab1 del secondo

    copiare i dati dalla tab2 del primo database nella tab2 del secondo database per i campi in comune e lasciare vuoti i campi in eccesso del secondo database, se nel secondo database vi sono tabelle in più rispetto al primo non deve modificare nulla.

    E' possibile fare una cosa del genere?

    Grazie

    Guido


    • Modificato Guido.G mercoledì 27 dicembre 2017 10:36
    mercoledì 27 dicembre 2017 10:35

Tutte le risposte

  • Ciao,

    Sì è possibile farlo ed esistono diverse modalità. Quella più "semplice" a mio avviso fa uso dei Linked Server con i quali potrai gestire database su diverse istanze di SQL Server. In questo modo, oltre alla semplicità, ti ritroverai anche a scrivere query la cui logica è del tutto analoga a quella che hai sempre utilizzato nel caso di un solo database. Per compltezza, l'alternativa a questa scelta potrebbe risiedere nella creazione di un Integration Service che esegue quanto richiesto da te, ma questo richiederebbe una serie di conoscenze a parte sulla materia.

    A presto,

    Gabriele

    giovedì 28 dicembre 2017 10:05
  • Grazie Gabriele per la tua risposta, ho provato a leggere l'articolo al link che mi hai riportato...sicuramente sbagli io, ma non credo che sia questo che serve a me, provo a spiegare cosa vorrei fare, forse aiuta a capire...

    ho un progetto in cantiere con VS2015 in VB.Net che sto portando avanti da molto tempo, questo immagazzina dati in un DataBase  creato in LocalDB, quando arriverò alla fine vorrei fare un'istallazione sul pc del progetto e quindi funzionerà indipendente da VS2015, considerando che avrei molti dati da inserire, ma considerando che non sono un esperto potrei aver necessità di modificare la struttura del database...aggiungere tabelle o aggiungere campi nelle tabelle.

    Facendo queste correzioni e salvando le modifiche il database si azzera e dovrei inserire di nuovo tutti i dati.

    Quindi la mia necessità di copiare il database o esportarlo dell'applicazione per poi importare i dati all'interno, in modo che copi i dati nello stesso ordine dell'esportazione, dove ci saranno nuove tabelle o campi aggiunti nelle tabelle esistenti non inserisca nessun valore.....mi sa che sia qualcosa di ambizioso per me.....

    Quindi torno a dire...è possibile?

    Ho provato a cercare qualcosa, ho trovati comandi in T-SQL del tipo SELECT...... INTO....OUTFILE

    ma ho difficoltà a capire come utilizzarlo e incrementarlo nel progetto e come rileggere il file esportato?

    giovedì 28 dicembre 2017 15:49
  • Ad esempio sto 

    provando con questo codice ad esportare i dati di una tabella:

    1° tentativo

    SELECT IdClienti, TipoCliente, FatturaCointestata, CodiceCliente, NomeCliente, CognomeCliente, IndirizzoCliente, CivicoCliente, ComuneCliente, ProvinciaCliente, CapCliente, SettoreCliente, RagioneSocialeCliente, IndirizzoRagSocCliente, CivicoRagSocCliente, ComuneRagSocCliente, ProvRagSocCliente, CapRagSocCliente, CodFiscaleCliente, PIvaCliente, TelefonoCliente, CellulareCliente, FaxCliente, EmailCliente, SitoCliente, NoteCliente, c1, c2, c3, c4, c5 INTO OUTFILE '/exportdata/C:\Users\Guido\Downloads/tabellaClient.txt'
     FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
     LINES TERMINATED BY '\n'
    FROM Table_Clienti
    2° Tentativo


    SELECT IdClienti, TipoCliente, FatturaCointestata, CodiceCliente, NomeCliente, CognomeCliente, IndirizzoCliente, CivicoCliente, ComuneCliente, ProvinciaCliente, CapCliente, SettoreCliente, RagioneSocialeCliente, IndirizzoRagSocCliente, CivicoRagSocCliente, ComuneRagSocCliente, ProvRagSocCliente, CapRagSocCliente, CodFiscaleCliente, PIvaCliente, TelefonoCliente, CellulareCliente, FaxCliente, EmailCliente, SitoCliente, NoteCliente, c1, c2, c3, c4, c5 
    INTO OUTFILE '/exportdata/tabellaClienti.txt'
      FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
      LINES TERMINATED BY '\n'
    FROM dbo.Table_Clienti

    nei due casi mi da errore nella creazione della query:

    Errore nella specifica della tabella di destinazione

    non dovrebbe puntare a creare un file?

    giovedì 28 dicembre 2017 16:06
  • potrei aver necessità di modificare la struttura del database...aggiungere tabelle o aggiungere campi nelle tabelle.

    Facendo queste correzioni e salvando le modifiche il database si azzera e dovrei inserire di nuovo tutti i dati.

    Ciao Guido,

    è da un po' di tempo che non uso LocalDB con Visual Studio 2015.. tuttavia trovo strano l'azzeramento dei dati ad ogni modifica che applichi allo schema del tuo database. Fossi in te, investirei un po' di tempo per approfondire questo comportamento, perché se riusciamo ad evitarlo, possiamo anche evitare di fare la copia dei dati..


    Sergio Govoni

    Microsoft Data Platform MVP | MVP Profile | English Blog | Twitter | LinkedIn


    giovedì 28 dicembre 2017 22:26
    Moderatore
  • Buongiorno Sergio, ho notato che se creo un database, nel mio caso LocalDB, ma credo sia uguale, con VS2015 e realizzo sempre con VS2015 il file di installazione e lo installo su una macchina ed utilizzandolo immetto dei dati, se successivamente sempre con VS2015 ammettiamo di aggiungere dei form e quindi una nuova tabelle e quindi devo fare una nuova installazione nella macchina, a questo punto andrei a perdere i dati che avevo inserito precedentemente....forse nel mio modo di fare c'è qualcosa di sbagliato....non so.....

    Guido

    venerdì 29 dicembre 2017 09:35
  • Buongiorno Sergio, ho notato che se creo un database, nel mio caso LocalDB, ma credo sia uguale, con VS2015 e realizzo sempre con VS2015 il file di installazione e lo installo su una macchina ed utilizzandolo immetto dei dati, se successivamente sempre con VS2015 ammettiamo di aggiungere dei form e quindi una nuova tabelle e quindi devo fare una nuova installazione nella macchina, a questo punto andrei a perdere i dati che avevo inserito precedentemente....forse nel mio modo di fare c'è qualcosa di sbagliato....non so.....

    Guido

    Buonasera !

    Se ho capito bene la discussione ... ... se lavori con SQL Server Express e Visual Studio Community (entrambi 2017), puoi importare in VS il database del SQL Server, farci tutte le modifiche che vuoi.

    All'interno di VS esiste una funzione che si chiama "Confronta schema". Lì è possibile allineare i dati tra i due database (quello di SQL Server e quello importato in Visual Studio), andando a scegliere anche quali dati aggiornare e quali no.

    venerdì 29 dicembre 2017 11:04
  • Ciao Robert, scusami....ma da PROFANO...abbi pazienza, parli di SQL Server e quindi anche Local DB? perchè io ho il database in Local DB.

    venerdì 29 dicembre 2017 11:47
  • Ciao Robert, scusami....ma da PROFANO...abbi pazienza, parli di SQL Server e quindi anche Local DB? perchè io ho il database in Local DB.

    Io mi riferisco al programma SQL Server 2017 Express, del quale esiste anche una versione con il LocalDB. Qui di seguito un articolo con il SQL Server 2016: https://docs.microsoft.com/it-it/sql/database-engine/configure-windows/sql-server-2016-express-localdb. 

    Tu hai questo programma ?



    • Modificato RobertIt69 venerdì 29 dicembre 2017 14:30
    venerdì 29 dicembre 2017 14:13
  • si...ho installa SQL Exspress ed ho appena finito di installare VS 2017, dove potrei trovare la funzione che dicevi "Confronta schema"?
    venerdì 29 dicembre 2017 21:03
  • Trovato, da Esplora Oggetti di SQL server, visualizzabile dal menù Visualizza-->Esplora oggetti SQL server, aprendo SQL Server-->(localdb)......-->Database-->database di sistema si aprono i percorsi dei database, da qui con il tasto destro del mouse si può fare il confronto dei database o dei dati...

    Ora devo un po giocarci per capire meglio...

    Grazie per il momento.

    Guido

    sabato 30 dicembre 2017 00:06
  • Avrei bisogno di un aiutino, dunque, provo a spiegare:

    Sempre con il progetto che sto facendo, ho realizzato i file d'installazione con Visual Studio 2015, tramite Pubblica dalla proprietà del progetto stesso, installando l'applicazione si riscontra che il database è vuoto, ma ammettiamo che per varie prove e test il database del progetto è popolato da molti dati, ma questi dati non risiedono nella cartella principale del progetto ma nel database sotto la cartella debug.

    Ma io riesco a far leggere il database presente sulla cartella principale del progetto (che è vuoto) e non il database sulla cartella debug.

    Come posso fare tramite Esplora Oggetti di SQL Server e quindi con :

    tasto destro del mouse -->Confronto dat.. 

    e quindi utilizzare il trasferimento dei dati dal database sulla cartella debug verso il database presente ed utilizzato dall'installazione.

    dove sbaglio?....come posso fare?

    Grazie

    Guido

    sabato 30 dicembre 2017 19:13
  • io ti consiglierei di lavorare con due istanze di sql, una locale per lo sviluppo e una remota per l'ambiente di produzione.

    in pratica dovresti non usare più LocalDB ed usare un SQL Express installato sul tuo pc.

    ciao


    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    e[dot]benussi[at]outlook[dot]it

    martedì 2 gennaio 2018 09:39
    Moderatore
  • Ciao Edoardo...mi sa che sta diventando complicata per me...potrei passare da LocalDB a SQLExpres senza dover riscrivere tutto il progetto che sto provando a fare? e se si in che modo?...non ne ho idea.....
    martedì 2 gennaio 2018 21:37
  • basta spostare il db in sql express e cambiare la connection string in modo da puntare alla nuova istanza.

    ciao


    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    e[dot]benussi[at]outlook[dot]it

    mercoledì 3 gennaio 2018 08:19
    Moderatore
  • mmm....per me è complicato, senza un esempio o qualche articolo da poter provare a capirci qualcosa è come dover fare un saggio di filosofia, ho provato a cercare qualcosa ma forse cerco sbagliato....
    mercoledì 3 gennaio 2018 20:21
  • qui trovi come spostare un database da LocalDB a un SQL Server

    http://kb.dynamsoft.com/questions/836/How+to+restore+my+LocalDB+into+SQL+Server%3F

    e qui trovi la connectionstring per LocalDB da cambiare con quella per un'istanza di SQL Server

    https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/creating-a-connection-string


    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    e[dot]benussi[at]outlook[dot]it

    giovedì 4 gennaio 2018 08:35
    Moderatore
  • Grazie Edoardo, appena ho un po di tempo provo a fare i cambiamenti e ti faccio sapere.....

    Grazie

    Guido

    giovedì 4 gennaio 2018 12:10