12
votes

SQL: Comment puis-je mettre à jour une valeur sur une colonne uniquement si cette valeur est null?

J'ai une question SQL qui peut être basique à certains mais me confondre.

Voici un exemple de noms de colonnes pour une table 'personne': Personnier, Prénom, Nom, Voiture, Colérie, Favdrink, FavFood

Disons que je saisis la ligne:

121312, Rayna, Pieterson, BMW123D, Brown, NULL, NULL

Maintenant, je veux mettre à jour les valeurs de cette personne, mais uniquement si la nouvelle valeur n'est pas NULL, MISE À JOUR:

121312, Rayna, Pieterson, NULL, Blonde, Fanta, Null

La nouvelle ligne doit être:

121312, Rayna, Pieterson, BMW123D, Blonde, Fanta, Null

Alors je pensais quelque chose dans le sens de:

Mettre à jour la personne (Personnale, prénom, nom de famille, voiture, coiffure, Favdrink, favfood) set voiture = @CAR (où @CAR n'est pas null), ColleColour = @AirColour (où @AirColour ...) ... etc.

Mon seul problème est que je ne peux pas regrouper toutes les conditions à la fin de la requête, car elle nécessitera toutes les valeurs d'avoir la même condition. Je ne peux pas faire quelque chose comme la mise à jour coiffure si @ Haircolour n'est pas null


2 commentaires

WOW: 5 minutes de silence, puis 4 personnes répondant à la même chose en même temps. :-)


Haha je sais que c'est génial, n'est-ce pas.


4 Réponses :


14
votes

Les éléments suivants doivent fonctionner: xxx

Il utilise le serveur SQL ISNULL fonction, qui retourne

  • la première valeur si elle est non nulle,
  • ou, sinon, la deuxième valeur (laquelle, dans ce cas, est la valeur actuelle de la ligne).

1 commentaires

Cela fonctionne également tout aussi bien qu'en utilisant des coalesce. Merci de votre aide. Désolé, j'ai accepté l'autre réponse comme ils étaient d'abord à répondre.



2
votes

Définissez la colonne égale à elle-même avec un rond isnull qui le réglait à votre paramètre.

UPDATE
    YourTable
SET
   YourColumn = ISNULL(YourColumn, @yourParameter)
WHERE
    ID = @id


1 commentaires

Ce n'est pas la question de la question. Quote: "Mettez à jour les valeurs de cette personne, mais uniquement si la valeur nouvelle n'est pas null"



25
votes

ID Utilisez Coallece pour ceci: http://msdn.microsoft.com/en-us/library/ms190349.aspx

update Person
set Car = coalesce(@Car, Car), HairColour = coalesce(@HairColour, HairColour)


2 commentaires

MySQL Référence: dev.mysql.com/doc/refman /5.0/fr/...


Merci beaucoup pour votre aide. Je pensais utiliser cette fonction mais je ne pouvais pas comprendre comment cela a fonctionné exactement. Cheers travaille un rêve



4
votes

Vous pouvez utiliser la fonction isnull : xxx


0 commentaires