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 :

INSERT valeur non nulle ou valeur par defaut [2008R2]


Sujet :

MS SQL Server

  1. #1
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut INSERT valeur non nulle ou valeur par defaut
    Bonjour,

    j'ai une table destination n'acceptant les valeurs nulles; vaut-il mieux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO MATABLE_DEST SELECT ISNULL(MONCHAMP,0)  FROM MATABLE_SRC
    ou bien passer le champ de la table de destination en non null default 0 ?

    merci

  2. #2
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    J'imagine que la colonne en question n'est pas la seule de la table, et que l'insertion concerne d'autres colonnes. A partir de là, le but étant de mettre une valeur si elle est non nulle, il faut passer par COALESCE. Mettre en "default 0" n'aurait pour seul effet que de permettre à des insertions ne mentionnant pas cette colonne d'y caser 0. Je doute que ça réponde au besoin

    Par contre, si la colonne cible n'accepte pas les valeur null, peut-être y a-t-il une bonne raison à la différence d'avec la table source ; potentiellement il faut envisager l'hypothèse que les lignes de source avec des valeurs null dans cette colonne ne devraient pas être insérées dans la table destination. Auquel cas, rajouter la condition :
    INSERT INTO MATABLE_DEST SELECT MONCHAMP FROM MATABLE_SRC
    WHERE MONCHAMP IS NOT NULL

  3. #3
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    merci Rei Ichido,

    en fait les valeurs possiblement nulles viennent du fait que la requête select contient un LEFT OUTER JOIN donc, si pas de jointure, valeurs nulles pour certains champs (en général des montants); c'est pour un Datamart
    ensuite on aggrège d'où la valeur 0 et non la valeur NULL. C'est pour cette raison que l'on a toujours un 0 si null.
    la requête est du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO table3 (ch1,ch2) 
    SELECT a.champ1,ISNULL(b.champ2,0) 
    from table1 a
    left outer join table2 b on a.pk1=b.pk2
    where a.champ3='toto'
    pourquoi le coalesce plutôt que le ISNULL ?
    ISNULL(MONCHAMP,0) n'est pas plus rapide que COALESCE(MONCHAMP,0) ?

  4. #4
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par serge0934 Voir le message
    pourquoi le coalesce plutôt que le ISNULL ?
    ISNULL(MONCHAMP,0) n'est pas plus rapide que COALESCE(MONCHAMP,0) ?
    Je n'ai jamais fait de comparaison entre les deux. Mais je préfère utiliser COALESCE parce que :
    - cela permet d'avoir plusieurs valeurs à la suite, c'est plus lisible dans ce cas
    - c'est une fonction générique SQL, et donc pas besoin de switcher avec d'autres fonctions spécifiques en passant de SQL Server à Oracle ou PostGre.

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

Discussions similaires

  1. Extraire les valeurs non nulles d'une matrice
    Par kwatz dans le forum MATLAB
    Réponses: 15
    Dernier message: 06/03/2009, 11h15
  2. Récupérer nombre de cellule de valeur non nulle
    Par Bibicmoi dans le forum Excel
    Réponses: 8
    Dernier message: 24/01/2009, 19h10
  3. nombre de valeurs non nulles dans une tables
    Par 080983 dans le forum SQL
    Réponses: 33
    Dernier message: 27/08/2007, 12h04
  4. Formule : nombre de valeur non nulles
    Par abertaud dans le forum Excel
    Réponses: 1
    Dernier message: 15/05/2007, 13h48
  5. [VBA-A] valeur non prise en compte par un composant
    Par robert_trudel dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/07/2006, 22h25

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