Domanda

Io ho table a E table b.(SQLServer2008)

Entrambe le tabelle hanno esattamente lo stesso schema.

Ai fini di questa domanda, considerare table a = la mia tabella di sviluppo locale, table b = il tavolo dal vivo.

Ho bisogno di creare uno script SQL (contenente UPDATE/DELETE/INSERT istruzioni) che aggiorneranno la tabella b affinché sia ​​uguale alla tabella a.Questo script verrà quindi distribuito nel database live.

Esistono strumenti gratuiti in grado di farlo o, meglio ancora, un modo in cui posso farlo da solo?

Sto pensando che probabilmente dovrei eseguire una sorta di join su tutti i campi nelle tabelle, quindi generare SQL dinamico basato su quello.

Qualcuno ha qualche idea?

MODIFICARE

Ok, ho pensato di chiarire un po' la questione.

La tabella che devo sincronizzare è una semplice tabella di ricerca.I dati sono molto semplici e chiari.

Ecco un'idea di cosa TABLE A potrebbe assomigliare a:

IdFoo          Activity      IsFoo
1              Foo           1
2              Bar           0

Ecco un'idea di cosa TABLE B potrebbe assomigliare a:

IdFoo          Activity      IsFoo
1              Foo           1
2              Bar           1

Fondamentalmente, tutto quello che voglio fare è aggiornarlo BIT colonna (IsFoo) In TABLE B per far corrispondere il valore corrispondente in TABLE A per lo stesso IdFoo.

Tieni a mente:

  • TABLE A è sul mio computer locale
  • TABLE B è sul server live

Ovviamente ho un backup (affidabile) di TABLE B sul mio computer locale su cui devo eseguire lo script, quindi eseguire lo script sul server live.

La tabella ha anche integrità referenziale (altre colonne non ho mostrato).Ciò significa che non posso semplicemente eliminare tutto TABLE B e fai un inserto da TABLE A.

Questo script sarà una tantum.Quindi non è necessario fare cose come server collegato, replica, ecc.Apprezzo le risposte però ragazzi.=)

MODIFICARE:

Ok, quindi ho seguito la risposta di Oleg (Confronto dati VS2010).Veloce, facile e funziona a meraviglia.

Per non dire che le altre risposte non sono corrette.Apprezzo tutte le risposte!

È stato utile?

Soluzione

In casi molto semplici si sarà in grado di definire nel vostro locale di SQL Server un nuovo server collegato (vedi in Microsoft SQL Server Management Studio in "Oggetti server" / "Linked Server") le differenze e l'uso INNER JOIN e OUTER JOIN per scoprire tra A e B tabelle.

In una situazione reale e più complessa si dovrebbe prendere in considerazione l'integrità referenziale, diverse chiavi esterne, e Identità (auto incrementale) campi esistenti nel database di destinazione, quindi lo script di aggiornamento sarà più complesso. Quindi ti consiglio di non trascorrere il vostro tempo nella creazione di sincronizzazione del vostro sviluppatore e la produzione di DB e utilizza uno strumento standard invece. Io uso ad esempio le funzionalità di Visual Studio Team Edition 2008 (o Database Edition) o Visual Studio 2010 Ultimate edition per confrontare i dati in due database. Funziona molto bene.

Altri suggerimenti

risposta in ritardo, ma può essere utile per i visitatori del filo

Oltre ad altre soluzioni di cui, posso suggerire cercando ApexSQL dati Diff. E 'possibile confrontare i dati del database e la sincronizzazione di SQL Server (nelle banche dati in tempo reale, nonché backup), e di automatizzare e pianificare la migrazione dei dati. Funziona con enormi database anche, ed è in grado di eseguire confronti direttamente da SQL Server Management Studio.

È possibile scaricare questo strumento gratuitamente e giocare con lui. È dotato di una versione di prova gratuita completamente funzionale, e offre una Community Edition (dopo il periodo di prova) che funziona su SQL Express e Azure database SQL.

Per ulteriori informazioni su questo strumento, è possibile visitare il sito http://www.apexsql.com/sql_tools_datadiff. aspx

Se si desidera solo sincronizzare i tavoli e non si cura di esaminare i cambiamenti in anticipo il comando merge può fare questo.

MSDN - MERGE (Transact-SQL)

L'(gratuito) Microsoft SSDT ha anche i dati confronto e la sincronizzazione costruiti in se è più limitata di strumenti di pagamento come i dati Redgate confrontano.

SQL Data Compare dal Redgate (anche se non gratuito ) e c'è anche SMO e la costruito in functionallity .

Wikipedia ha piuttosto un elenco completo di software.

Poiché si tratta di una tantum, è possibile utilizzare questa query per trovare le righe che sono diverse in questo due tabelle:

(SELECT * FROM TABLE_A
 MINUS
 SELECT * FROM TABLE_B)

 UNION ALL

(SELECT * FROM TABLE_B
 MINUS
 SELECT * FROM TABLE_A)

MINUS confronterà campo dischi di campo, allora sarà scartare i record della prima tabella per cui v'è atto identico nella seconda tabella. Questo funziona in questo modo:

  • Prima MINUS ottiene tutti i record da TABLE_A che non sono in TABLE_B
  • Secondo MINUS ottiene tutti i record da TABLE_B che non sono in TABLE_A
  • Union ottiene tutti i record da entrambe le tabelle per i quali non v'è alcuna record corrispondente nella tabella.

Ora è possibile inserire i record in alcuni tabella temporanea e quindi fare inserti / aggiornamenti.

A seconda delle esigenze, è possibile limitare dei campi per il confronto.

Si noti che è necessario chiave primaria per questo al lavoro.

Modifica
Ooops. SQL Server non supporta operatore MINUS. Sto lavorando con Oracle lo scorso anno e mezzo, quindi questo era automatico.

È possibile utilizzare al posto dell'operatore EXCEPT. Si veda questo articolo: ad eccezione di e INTERSECT ( Transact-SQL)

Modifica 2:

di scherand commento :
Se lui davvero non può collegarsi dalla macchina locale al server di vivere, di lui può semplicemente scaricare TABLE_A e caricarlo sul server. In un modo o l'altro, l'obiettivo è quello di cambiare i dati della tabella sul server di vivere.

mi sono imbattuto nello stesso problema come voi - cercato uno strumento gratuito che confronta i dati da due tabelle della MS SQL - e ha trovato nulla. Poi ho creato una semplice utility a riga di comando freeware. Esso mette a confronto i dati da due tabelle, e crea statemenets INSERT/DELETE/UPDATE per rendere i dati della tabella di destinazione la stessa fonte. Ora sto utilizzando per il confronto dei dati, e come è completamente gratuito, posso consigliare di controllare fuori a: Sourceforge. net - UltraDBC

Si potrebbe utilizzare un generatore di script di dati che crea lo script per gli inserti, e quindi utilizzare un tool di confronto file come WinMerge per confrontare i file per trovare le differenze. C'è un articolo sulla generazione degli script di dati sul progetto di codice: http: //www.codeproject. com / KB / database / sqlinsertupdategenerator.aspx

tablediff avrebbe funzionato - è gratuito e viene fornito con SQL Server http://msdn.microsoft.com/en-us/library/ms162843.aspx

Si può anche provare a utilizzare il import and export data fornito da SQL Server 2008. Il suo è un modo abbastanza semplice per copiare tutti i dati da e verso qualsiasi luogo. Faccio la stessa cosa e funziona perfettamente.

Si potrebbe provare il nostro Confronto schema per SQL Server

Questo strumento non è gratuito (è shareware), ma è possibile utilizzare 30 giorni di prova gratis e anche, si ha l'opportunità di ottenere una licenza gratuita per questo prodotto - si prega di consultare il nostro libero condizioni di licenza pagina .

cosa succede se:

  1. copiare devTableA su prod,
  2. sospendere dipendenze prodTableB
  3. rinominare prodTable B a prodTableB1,
  4. rename devTableA a prodTableB
  5. dipendenze reimplementare sulla nuova prodTableB
  6. nuovo test prodTableB e quindi eliminare il nome vecchio prodTableB

o se si dispone di essere più rispettoso dell'esistente prodTableB ei tuoi valori di colonna di identità sia in dev e prod partita (anche se i valori non sono continui) ...

declare @iLast int, @x int, @y int
select @iLast = (select MAX(id) from prodTableB)
set @x = 1
while @x <= @iLast
begin
  select @y = (select COUNT(*) from prodTableB where id = @x)
  if @y = 1
    begin
      update prodTableB set isFoo = (select isFoo from devTableA where id=@x
    end
  @x=@x+1
end

Puoi anche dare un'occhiata Confronto dati xSQL.La versione SQL Express è gratuita ed esiste anche una versione Lite che andrà bene per i database di piccole dimensioni.

Un buon strumento gratuito è anche il confronto dei dati SSDT.

Disclaimer:Sono affiliato con xSQL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top