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

Développement SQL Server Discussion :

Merge et valeurs NULL


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 28
    Points : 93
    Points
    93
    Par défaut Merge et valeurs NULL
    Bonjour,

    J'aurais besoin d'un coup de main sur l'utilisation d'un MERGE avec SQL SERVER 2008.

    J'ai donc un code qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    MERGE dbo.TABLE1 t1
    USING (
      SELECT t2.col1,t2.col2,t2.col3
      FROM TABLE2 t2
    ) AS t1_temp (col1,col2,col3)
    ON (
      t1.col1 = t1_temp.col1
      AND t1.col2 = t1_temp.col2
      AND t1.col3 = t1_temp.col3
    )
    WHEN NOT MATCHED THEN INSERT
      ...
    Le problème est qu'il peut arriver que certaines colonnes comparées comprennent des valeurs NULL.

    Si ma table t1 a une ligne :
    col1 | col2 |col3
    1 | NULL | 1

    et que je tente d'insérer la même ligne, elle sera réinsérée car NULL n'étant pas vraiment une valeur SQL SERVER ne considère pas les deux lignes comme identiques.

    Je me casse la tête là dessus mais je m'en sors pas vraiment.

    Quelqu'un à une idée ?

    J'ai tenté d'utiliser la commande SET ANSI_NULLS OFF, mais ça ne marche pas pour la condition ON d'un MERGE on dirait.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous pouvez ajouter des "OR col2 IS NULL" dans la jointure ou bien utiliser la fonction COALESCE.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    MERGE dbo.TABLE1 t1
    USING (
      SELECT t2.col1,t2.col2,t2.col3
      FROM TABLE2 t2
    ) AS t1_temp (col1,col2,col3)
    ON (
      t1.col1 = t1_temp.col1
      AND (t1.col2 = t1_temp.col2 OR t1.col2 IS NULL)
      AND t1.col3 = t1_temp.col3
    )
    WHEN NOT MATCHED THEN INSERT
      ...

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 28
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Vous pouvez ajouter des "OR col2 IS NULL" dans la jointure ou bien utiliser la fonction COALESCE.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    MERGE dbo.TABLE1 t1
    USING (
      SELECT t2.col1,t2.col2,t2.col3
      FROM TABLE2 t2
    ) AS t1_temp (col1,col2,col3)
    ON (
      t1.col1 = t1_temp.col1
      AND (t1.col2 = t1_temp.col2 OR t1.col2 IS NULL)
      AND t1.col3 = t1_temp.col3
    )
    WHEN NOT MATCHED THEN INSERT
      ...
    Cette solution ne peut pas marcher car toutes les lignes ayant un NULL sur la colonne 2 et des valeurs correspondantes sur les autres colonnes vont être considérée MATCHED même si il y a une valeur NOT NULL sur t1_temp.col2.

    Pour la fonction COALESCE, je ne la connaissais pas, mais je ne vois pas comment l'utiliser pour mon cas.

    Merci quand même pour votre réponse rapide.

Discussions similaires

  1. requete avec la valeur NULL
    Par Hinkel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/11/2008, 16h39
  2. Passer une valeur Null dans un argument de procédure
    Par preempalver dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/12/2003, 20h52
  3. Selectionner un champ de valeur nulle
    Par arcane dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/09/2003, 14h26
  4. [CR9] conversion de valeurs NULL
    Par ministry dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 12/09/2003, 11h41
  5. Valeurs Nulles ou Valeurs à Zéro
    Par LLaurent dans le forum XMLRAD
    Réponses: 5
    Dernier message: 30/07/2003, 11h40

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