2010-04-20 14 views
12

Mam pytanie SQL, które może być podstawowe dla niektórych, ale jest mylące.SQL: Jak mogę zaktualizować wartość tylko w kolumnie, jeśli ta wartość jest zerowa?

Oto przykład nazw kolumn dla tabeli 'osoba': personalID, imię, nazwisko, samochód, HairColour, FavDrink, FavFood

Załóżmy, że wejścia I wiersz:

121312, Rayna, Pieterson, BMW123d, Brown, NULL, NULL

teraz chcę zaktualizować wartości dla tej osoby, ale tylko wtedy, gdy nowa wartość nie jest null, Aktualizacja:

121312, Rayna, Pieterson NULL, Blond, Fanta NULL

Nowy rząd musi być:

121312, Rayna, Pieterson, BMW123d, Blond, Fanta NULL

Więc myślałem coś wzdłuż linii:

Zaktualizuj osobę (PersonalID, FirstName, LastName, Car, HairColour, FavDrink, FavFood) ustaw Car = @ Car (gdzie @Car nie jest pusty), HairColour = @HairColour (gdzie @HairColour ...) ... itd.

Moim jedynym zmartwieniem jest to, że nie mogę zgrupować wszystkich warunków na końcu zapytania, ponieważ będzie wymagać, aby wszystkie wartości miały ten sam warunek. Nie mogę zrobić coś takiego aktualizacji HairColour jeśli @HairColour nie jest Null

+0

Wow: 5 minut ciszy, potem 4 osoby odpowiadające samo w o tym samym czasie. :-) – Heinzi

+0

Haha wiem, że to świetnie, prawda. –

Odpowiedz

24

Id użycie COALESCE na to: http://msdn.microsoft.com/en-us/library/ms190349.aspx

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

Numer referencyjny MySQL: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html# function_coalesce – dnagirl

+0

Dziękuję bardzo za pomoc. Myślałem o użyciu tej funkcji, ale nie mogłem zrozumieć, jak to działało. Pozdrawiam działa marzenie –

13

Poniższa powinno działać:

UPDATE Person 
    SET Car = ISNULL(@Car, Car), 
     HairColour = ISNULL(@HairColour, HairColour), 
     ... 

Używa SQL Server ISNULL funkcję, która zwraca

  • pierwszą wartość jeśli ma wartość inną niż null,
  • lub, w przeciwnym razie, drugą wartość (która w tym przypadku jest bieżącą wartością wiersza).
+0

Działa to równie dobrze jak przy użyciu koalescencji. Dzięki za pomoc.Przykro mi, że przyjąłem drugą odpowiedź, ponieważ najpierw odpowiedziały. –

2

Ustawia kolumnę równą sobie za pomocą isnull round it ustawiając ją na swój parametr.

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

To nie było pytanie. Cytuj: "zaktualizuj wartości dla tej osoby, ale tylko wtedy, gdy * nowa * wartość nie jest zerowa" – Heinzi

4

Można użyć isnull funkcję:

update Person 
set 
    Car = isnull(@Car, Car), 
    HairColour = isnull(@HairColour, HairColour), 
    FavDrink = isnull(@FavDrink, FavDrink), 
    FavFood = isnull(@FavFood, FavFood) 
where PersonalID = @PersonalID 
Powiązane problemy