8
votes

T-SQL - Y a-t-il un moyen (gratuit) de comparer les données dans deux tables?

J'ai Tableau A code> et Tableau B code>. (SQL Server 2008)

Les deux tables ont exactement le même schéma. P>

Aux fins de la question, considérez Tableau A code> = mon tableau de devir local, b code> = la table en direct. P>

J'ai besoin de créer un script SQL (contenant Mettre à jour / insérer / insérer / insert> instructions) qui mettront à jour le tableau B pour être le même que Tableau A. Ce script sera ensuite déployé dans la base de données en direct. P>

Tous les outils gratuits qui peuvent le faire, ou mieux encore une façon de le faire moi-même? P>

Je pense Je dois probablement faire un certain type de jointure sur tous les champs des tables, puis générer une SQL dynamique basée sur cela. P>

Quelqu'un a des idées? P>

Edit P>

D'accord, pensais que je clarifierais un peu cette question. P>

Le tableau que j'ai besoin de synchroniser est une table simple. Les données sont très simples et simples. P>

Voici une idée de ce que Tableau A code> pourrait ressembler à: p>

IdFoo          Activity      IsFoo
1              Foo           1
2              Bar           1


2 commentaires

Toute réponse dépendra beaucoup du fait que si vous avez un champ qui peut être utilisé de manière fiable pour correspondre à deux rangées.


La réponse dépend également de la fréquence à laquelle vous devez le faire et de la taille des données? S'il s'agit d'une chose une fois que vous pouvez simplement utiliser l'assistant d'importation / exportation pour transférer tableau B sur Tableau A . Si vous souhaitez que les modifications soient reflétées immédiatement et que vous puissiez implémenter une réplication.


12 Réponses :


4
votes

Il y a Comparaison de données SQL de Redgate (bien que non libre "Et il y a aussi SMO et le intégré Fonctionnalité.

Enfin Wikipedia a une liste complète de logiciels.


3 commentaires

L'outil RedGate SQL Data Data Compare n'est pas gratuit. SMO est une bonne idée et le lien Wikipedia est une excellente source.


Désolé, Bernard, j'ai mal interprété une partie de la question et l'interprétait en quelque sorte comme si libre était préférable, bien que facultatif, j'ai modifié la réponse pour refléter cela. Besoin de plus de café je suppose.


Le lien Wikipedia maintenant, ennuyeux. Il suffit de rediriger vers la page SQL Server principale.



2
votes

Vous pouvez utiliser un générateur de script de données qui crée un script pour les insertions, puis utilisez des outils de comparaison de fichiers tels que Winmerge pour comparer les fichiers pour trouver les différences. Il y a un article sur la génération des scripts de données sur le projet de code: http: //www.codeproject. COM / KB / Base de données / SQLINSERTUPDATEGENERATOR.ASPX


0 commentaires

5
votes

Si vous voulez simplement synchroniser les tables et ne vous souciez pas de passer en revue les modifications à l'avance, le Fusionner la commande peut faire cela.

MSDN - Fusionner (transact-sql)

Le (gratuit) Microsoft SSDT dispose également de la comparaison de données et de la synchronisation intégrée, bien qu'elle soit plus limitée que celle des outils payants, tels que Redgate Data Comparer.


0 commentaires

0
votes

Vous pouvez également essayer d'utiliser les données Importer et exporter des données fournies par SQL Server 2008. C'est un moyen assez simple de copier toutes les données de n'importe où sur n'importe où dans n'importe où. Je fais la même chose et travaille parfaitement.


0 commentaires

5
votes

Dans des cas très simples, vous pourrez définir dans votre serveur SQL local un nouveau serveur lié (voir dans Microsoft SQL Server Management Studio sous "Serveur Objets" / "Server Linked") et utilisez Join interne et jointure extérieure pour connaître les différences entre les tables A et B.

Dans une situation réelle et plus complexe, vous devez prendre en compte une intégrité référentielle, différentes claviers étrangères et des champs d'identité (auto-incrémentaux) existant dans la base de données de destination, de sorte que le script de mise à jour sera plus complexe. Je vous recommanderai donc que vous ne passez pas votre temps à créer une synchronisation de votre développeur et de votre DB de votre développeur et d'utiliser un outil standard. J'utilise par exemple les fonctionnalités de Visual Studio Equipe Edition 2008 (ou Edition de base de données) ou de Visual Studio 2010 Edition ultime pour comparer les données dans deux bases de données. Cela fonctionne très bien.


4 commentaires

IVE GOT VS2010 - Comment comparez-vous les données dans deux bases de données avec cela? Avez-vous une référence / lien?


Il suffit d'aller dans le menu "Data" Choisissez "Comparer des données" et "Nouvelle comparaison de données". Choisissez ensuite des bases de données de source et de destination et des "options de comparaison des données". Suivez ensuite l'assistant. À la fin, vous pouvez examiner la comparaison des résultats, «Destellect» certaines différences et écrivit les résolutions directement dans la base de données de destination ou générer un script SQL. Dans le menu "Outil" "Options", vous pouvez choisir certaines options de génération de code. Vous pouvez non seulement comparer les données, mais également comparer le schéma des bases de données si nécessaire.


Cool - ok malade donner ça va demain (quand je suis de retour au travail) et que tu saches comment je vais - acclamer pour la pointe!


Vous pouvez en savoir plus sur la comparaison et la synchronisation des données dans Visual Studio 2010 sous msdn.microsoft. com / fr-nous / bibliothèque / dd193261.aspx . Au fait, si nécessaire, vous pouvez automatiser les données comparatives via DTE (voir blogs.msdn.com/b/psirr/archive/2008/11/22/... )



3
votes

Comme il en est un éteint, vous pouvez utiliser cette requête pour trouver des lignes différentes dans ces deux tables: xxx

moins comparera le champ des enregistrements par champ , alors il va jeter les registres de la première table pour laquelle il y a un enregistrement identique dans la deuxième table. Cela fonctionne comme ceci:

  • premier moins Obtient tous les enregistrements de Table_a qui ne sont pas dans TABLE_B
  • second moins obtient tous les enregistrements de table_b qui ne sont pas dans table_a
  • Union obtient tous les enregistrements des deux tableaux pour lesquels il n'y a pas d'enregistrement correspondant dans une autre table.

    Vous pouvez maintenant insérer ces enregistrements dans une table temporelle, puis effectuer des insertions / mises à jour.

    Selon vos besoins, vous pouvez limiter la liste de champs de comparaison.

    Notez que vous avez besoin de la clé primaire pour que cela fonctionne.

    EDIT:

    Ooops. SQL Server ne prend pas en charge l'opérateur moins . Je travaille avec Oracle l'année dernière et la moitié, donc c'était automatique.

    Vous pouvez utiliser sauf opérateur. Voir cet article: sauf et intersect ( Transact-sql)

    edit 2:

    re SCHERAND's Commentaire:

    S'il ne peut vraiment pas se connecter à partir de la machine locale à Live Server, il peut simplement vider table_a et le charger sur le serveur. Un moyen ou l'autre, l'objectif est de changer de données de table sur Live Server.


2 commentaires

Intéressant ... jamais entendu parler du mot clé moins. Je vais donner cela aussi (et oui - la première colonne est une identité pk - identité).


Cela ne fonctionne pas, à moins que OP ne puisse définir son poste de travail / serveur en direct en tant que serveur lié (comme @Oleg pointé sorti) ... CITE: "Gardez à l'esprit: Tableau A est sur ma table de machine locale B est sur le serveur Live Server "



0
votes

Vous pouvez essayer notre Schema Comparer pour SQL Server

Cet outil n'est pas gratuit (c'est Shareware), mais vous pouvez utiliser un essai de 30 jours gratuitement et vous avez la possibilité d'obtenir une licence gratuite pour ce produit - veuillez vous reporter à notre Conditions de licence gratuite Page .


0 commentaires

1
votes

Tablediff fonctionnerait - c'est gratuit et livré avec SQL Server http://msdn.microsoft.com/en-us/library/ms162843.cox


0 commentaires

3
votes

J'ai couru dans le même problème que vous avez recherché un outil gratuit qui compare les données de deux tables MS SQL - et rien trouvé. Ensuite, j'ai créé une simple utilitaire de ligne de commandement gratuit. Il compare les données de deux tables et crée des Insérer / Supprimer / mettre la mise à jour StateMenets pour rendre les données de la table de destination identique à la source. Maintenant, je l'utilise pour la comparaison des données, et comme il est totalement gratuit, vous pouvez recommander de vérifier à: Sourceforge. NET - ULTRADBC


0 commentaires

0
votes

Que se passe-t-il si vous:

  1. Copiez DevTablea sur Prod,
  2. Suspendez les dépendances sur PRODTABLAB
  3. Renommer ladactable B à ProDTableB1,
  4. Renommez DevTablea à ProDTableB
  5. Dépendances de réimplication sur la nouvelle prodtableb
  6. Testez de nouveau prodtableb, puis supprimez Old ProdTableb

    ?

    ou si vous devez être plus respectueux des valeurs de PRODTABLB existantes et de vos valeurs de colonne d'identité dans laquelle Dev et Prod Correspondant (même si les valeurs ne sont pas continues) ... xxx


0 commentaires

6
votes

réponse tardive mais peut être utile aux visiteurs de fil

Outre d'autres solutions mentionnées, je peux suggérer d'essayer des données Apexsql Diff. Il peut comparer et synchroniser des données de base de données SQL Server (dans des bases de données en direct ainsi que des sauvegardes) et automatiser et planifier des migrations de données. Il fonctionne également avec d'énormes bases de données et est capable de faire des comparaisons directement à partir de SSMS.

Vous pouvez télécharger cet outil gratuitement et jouer avec elle. Il propose un essai gratuit entièrement fonctionnel et offre une édition communautaire (après la période d'essai terminée) qui fonctionne sur la base de données SQL Express et Azure SQL.

Pour en savoir plus sur l'outil, vous pouvez visiter http://www.apexsql.com/sql_tools_datadiff. ASPX


0 commentaires