IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

comparer deux tables


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut comparer deux tables
    salut
    je veux comparer la structure de deux table pour savoir s'il ont la même structure ou pas
    j'ai essayé ceci mais ça ne me donne que les colonnes communes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select s1.name, s1.type, s2.name, s2.type from syscolumns s1, syscolumns s2  where s1.id = object_id(T1) and s2.id = object_id(T2)
    and s1.name=s2.name
    merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 865
    Points : 53 021
    Points
    53 021
    Billets dans le blog
    6
    Par défaut
    Si la comparaison ne porte que sur les colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT *, 'Table1' AS Source
    FROM  INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'dbo'
       AND TABLE_NAME = 'Matable1'
    EXCEPT
    SELECT *, 'Table1' AS Source
    FROM  INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'dbo'
       AND TABLE_NAME = 'Matable2'
    UNION ALL
    SELECT *, 'Table2' AS Source
    FROM  INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'dbo'
       AND TABLE_NAME = 'Matable2'
    EXCEPT
    SELECT *, 'Table2' AS Source
    FROM  INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'dbo'
       AND TABLE_NAME = 'Matable1'
    A +

  3. #3
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 567
    Points
    19 567
    Billets dans le blog
    25
    Par défaut
    Autre possibilité plus "bourrin", mais qui teste aussi les types

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    ALTER proc [dbo].[sp_compareTbl] 
    (@Tbl1 sysname,
    @Tbl2 sysname)
    as
    begin
     
    create table #comp(Analyse varchar(20),
                    Tbl sysname,
                    col sysname)
     
    /* lignes identiques */
    insert into #comp 
    select 'Colonnes identiques', '*', s1.name
     from syscolumns s1 inner join syscolumns s2
    on s1.name = s2.name and s1.id=object_id(@tbl1) and s2.id=object_id(@tbl2) and s1.type=s2.type
     
    /* Types différents */
    insert into #comp 
    select 'Types différents', '*', s1.name from syscolumns s1 inner join syscolumns s2
    on s1.name = s2.name and s1.id=object_id(@tbl1) and s2.id=object_id(@tbl2) and s1.type<>s2.type
     
     
    /* Colonnes surnuméraires */
    insert into #comp 
    select 'Colonne surnuméraire', @Tbl1, name 
    from syscolumns
    where name not in (select name from syscolumns where id=object_id(@tbl2))
    and id=object_id(@tbl1)
     
    /* Colonnes manquantes */
    insert into #comp 
    select 'Colonne surnuméraire', @Tbl2, name 
    from syscolumns
    where name not in (select name from syscolumns where id=object_id(@tbl1))
    and id=object_id(@tbl2)
     
    select * from #comp
     
    drop table #comp
    end
    ... vous pouvez bien évidemment vous passer de la procédure stockée, de la table temporaire et des divers inserts (et les remplaçant par un UNION ALL unique), mais c'est moins lisible...

  4. #4
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    Dans le même ordre d'idées, il existe le projet OPEN DBDiff
    http://opendbiff.codeplex.com/ qui permet de comparer 2 structures et de générer les scripts.

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut
    J'ai essayé ceci mais ça me donne toutes les colonnes des deux tables, je veux juste savoir si les deux tables ont les memes champs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    SELECT *, 'Table1' AS Source
    FROM  INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'dbo'
       AND TABLE_NAME = 'Matable1'
    EXCEPT
    SELECT *, 'Table1' AS Source
    FROM  INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'dbo'
       AND TABLE_NAME = 'Matable2'
    UNION ALL
    SELECT *, 'Table2' AS Source
    FROM  INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'dbo'
       AND TABLE_NAME = 'Matable2'
    EXCEPT
    SELECT *, 'Table2' AS Source
    FROM  INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'dbo'
       AND TABLE_NAME = 'Matable1'
    merci pour l'aide

Discussions similaires

  1. Comparer deux tables
    Par ash_rmy dans le forum SAS Base
    Réponses: 3
    Dernier message: 03/11/2009, 16h09
  2. Tableau pour Comparer deux tables
    Par Frog74 dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/04/2008, 10h09
  3. Comparer deux tables
    Par wachoo31 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/10/2007, 19h55
  4. comparer deux tables
    Par khayate dans le forum VB.NET
    Réponses: 1
    Dernier message: 30/07/2007, 17h21
  5. comparer deux tables
    Par moicats dans le forum Access
    Réponses: 4
    Dernier message: 15/05/2006, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo