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 :

[SQLServer 2005] Constraint et valeur à NULL


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 165
    Points : 136
    Points
    136
    Par défaut [SQLServer 2005] Constraint et valeur à NULL
    Bonjour.


    Je crée maTable dans ma BD avec trois champs.

    A la création, je met une contrainte LIKE suivi d'une expression régulière pour mon attribut addresseIP.

    Je lance SQL Server Management Studio.

    Je modifie maTable en cochant la checkBox "allow Nulls" pour mon champs adresseIP.

    Je sauvegarde. Dans l'excès de prudence je ferme et redémare Management Studio.

    J'essaye d'insérer une ligne dans ma table avec adresseIP à NULL. Et ça me dit que je violes la contrainte LIKE sur mon champ adresseIP.

    Qu'ai-je mal fait ?

  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 862
    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 862
    Points : 53 013
    Points
    53 013
    Billets dans le blog
    6
    Par défaut
    Ce serait plus intelligent si vous reproduisiez le code de votre ordre SQL ici.

    Mais le résultat est parfaitement logique :
    Vous prévoyez une contrainte CHECK (MaColonne LIKE ...) et spécifier d'autre part une autre contrainte NULL.
    C'est parfaitement contradictoire car vous imposez un motif à cette colonne. Elle ne peut par conséquent rester NULL.

    Au passage NULL n'est pas une valeur. C'est un MARQUEUR !
    Lire l'article que j'ai écrit sur le traitement des marqueurs NULL :
    http://sqlpro.developpez.com/cours/null/

    Pour solutionner votre problème, votre contrainte CHECK devrait s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CHECK (MaColonne IS NULL or MaColonne LIKE ...)
    A l'avenir
    1) pensez à copier coller le code SQL
    2) écrivez vos CREATE TABLE directement en SQL. Vous y verrez plus clair. L'interface graphique permet peu de chose et en masquant la complexité empêche de comprendre ce que vous faites donc de vous rendre compte de vos erreurs !

    A +

  3. #3
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 165
    Points : 136
    Points
    136
    Par défaut
    Ok merci. Je viens de lire ton article sur les "Marqueurs" NULL ... un vrai casse-tête selon les différentes BD. J'ai aussi appris que SQL Server mettait par défaut à NOT NULL toutes valeurs non précisées NULL, chose que j'ignorais étant n00bi en SQL Server.

    Merci

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

Discussions similaires

  1. [VB.net 2005] Définir une valeur nulle dans ma comboBox
    Par WriteLN dans le forum Framework .NET
    Réponses: 4
    Dernier message: 04/04/2008, 17h11
  2. [SQL SERVER 2005][ADO.NET] insertion de la valeur NULL
    Par nem&sys dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/11/2007, 11h39
  3. Réponses: 2
    Dernier message: 01/10/2007, 12h07
  4. [VB.NET 2005] Combobox Lié avec valeur NULL
    Par Thierryx dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/08/2006, 17h38
  5. Réponses: 4
    Dernier message: 02/05/2006, 14h10

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