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 :

interdire le doublon pour 2 colonnes (2 tables différentes)


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 150
    Par défaut interdire le doublon pour 2 colonnes (2 tables différentes)
    bonjour wolrd,
    j'aimerai savoir comment interdire le double pour 2 colonne dans 2 table relationnelle


    EX:
    table1------------- table2
    colonne x ---------- colonne x
    a ----------------- b
    s ----------------- e


    donc interdire l 'ajout de b et e dans la table1 + interdire l 'ajout de a et s dans la table2
    et aussi interdire le doublon de a et s dans la table1 + interdire le doublon de b et e dans la table2

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Pour l’interdiction d'ajout, une contrainte de domaine suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    -- Interdire l 'ajout de b et e dans la table1
    ALTER TABLE dbo.table1
    ADD CONSTRAINT CHKtable1_colonneX CHECK (colonneX NOT IN ('b', 'e'))
     
    -- Interdire l 'ajout de a et s dans la table2 
    ALTER TABLE dbo.table2
    ADD CONSTRAINT CHKtable2_colonneX CHECK (colonneX NOT IN ('a', 's'))
    Pour les doublons, il suffit d'ajouter une contrainte d'unicité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    -- Interdire le doublon de a et s dans la table1 
    ALTER TABLE dbo.table1
    ADD CONSTRAINT UQtable1 UNIQUE (colonneX)
     
    -- Interdire le doublon de b et e dans la table2 
    ALTER TABLE dbo.table2
    ADD CONSTRAINT UQtable2 UNIQUE (colonneX)
    J'ai donné quelques exemples d'ajouts de contraintes à des tables existantes ici

    Les deux colonnes ne pourront dont recevoir qu'une seule fois n'importe quelle valeur.
    Notez que SQL Server a le défaut, pour les contraintes d'unicité, de considérer NULL comme une valeur, ce qui est faux, et que l'on peut contourner par un index unique filtré, ce qui n'est possible qu'avec SQL Server 2008.

    @++

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 150
    Par défaut
    mais non !
    a b e c sont que des exemples
    je parle d'une maniere generale
    interdire les doublon dans les deux colonne
    comme s il s'agit d un seul colonne

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Pourquoi faire 2 tables dans ce cas ??? C'est stupide. N'en faites qu'une !

    Donnez votre cas concret et non pas des exemples scolaires....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre éclairé
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Par défaut
    Je suis d'accord avec SQLPro, néanmoins, si tu as réellement besoin de deux tables, tu peux passer par des triggers afin de vérifier à l'insertion que les données ne sont pas présentes dans l'autre table et inversement. Si la donnée n'est pas présente tu inserts, sinon tu lèves une exception personnalisée.

    En espérant t'avoir aidé.

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 150
    Par défaut
    l'application est déjà faite ! et je n'ai pas l'intention de recoder

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,

    Pour l’interdiction d'ajout, une contrainte de domaine suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -- Interdire l 'ajout de b et e dans la table1
    ALTER TABLE dbo.table1
    ADD CONSTRAINT CHKtable1_colonneX CHECK (colonneX NOT IN ('b', 'e'))


    Bonjour,

    Ou mettre ce code ?

    Merci a+

  8. #8
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Qui êtes vous Gorane? l'initiateur du post avec un autre pseudo?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Par défaut
    Heu ... Non pas du tout...

    je comprend la question. Vu comment il répond ...

    C'est en cherchant sur le forum que je suis tombé sur ce post.

    Donc voila ...

    Merci d'avance
    a+

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 31
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Notez que SQL Server a le défaut, pour les contraintes d'unicité, de considérer NULL comme une valeur, ce qui est faux, et que l'on peut contourner par un index unique filtré, ce qui n'est possible qu'avec SQL Server 2008.

    Bonjour je voudrais créer une contrainte qui interdit les doublons sur une colonne sauf si la "valeur" de la colonne est NULL.

    donc si j’insère dans ma table dans le champ en question :
    1 -> ok
    2 -> ok
    1 -> Erreur car déjà dans la table
    NULL -> ok
    NULL -> ok car NULL même si déjà dans la table

    Je n'y parviens pas avec l'index unique filtré : peut-être mon filtre qui n'est pas bon.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 31
    Par défaut
    c'est bon, j'ai réussi : la réponse est ici :
    http://blog.developpez.com/mikedavem...e_interne_2008

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] interdire saisie doublon sur une colonne
    Par borisp dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 15/11/2011, 14h39
  2. requête select de plusieurs colonnes de tables différentes
    Par lahmar.abdel1 dans le forum Général Java
    Réponses: 4
    Dernier message: 23/04/2010, 16h44
  3. Réunir des colonnes de tables différentes dans une requête
    Par GCAccess dans le forum Modélisation
    Réponses: 3
    Dernier message: 13/03/2009, 23h59
  4. Pivot de deux colonnes de tables différentes
    Par badi3a82 dans le forum Développement
    Réponses: 5
    Dernier message: 22/10/2008, 13h12
  5. Union de 2 tables pour une colonne
    Par charleshbo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/04/2006, 17h23

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