2010-04-20 26 views
12

Tôi có một câu hỏi SQL mà có thể là cơ bản đối với một số nhưng gây nhầm lẫn cho tôi.SQL: Làm thế nào tôi có thể cập nhật giá trị trên một cột chỉ khi giá trị đó là null?

Dưới đây là một ví dụ về tên cột trong bảng 'Người': PersonalID, FirstName, LastName, Car, HairColour, FavDrink, FavFood

Hãy nói rằng tôi nhập hàng:

121.312, Rayna, Pieterson, BMW123d, Nâu, NULL, NULL

Bây giờ tôi muốn cập nhật các giá trị cho người này, nhưng chỉ khi giá trị mới không phải là null, cập nhật:

121312, Rayna, Pieterson, NULL, Vàng, Fanta, NULL

Hàng mới cần phải được:

121312, Rayna, Pieterson, BMW123d, Vàng, Fanta, NULL

Vì vậy, tôi đã suy nghĩ một cái gì đó dọc theo dòng:

Người cập nhật (PersonalID, FirstName, LastName, Car, HairColour, FavDrink, FavFood) đặt Car = @Car (nơi @Car không phải là null), HairColour = @HairColour (nơi @HairColour ...) ... v.v ...

Mối quan tâm duy nhất của tôi là tôi không thể nhóm tất cả các điều kiện ở cuối truy vấn vì nó sẽ yêu cầu tất cả các giá trị phải có cùng điều kiện. tôi không thể làm điều gì đó như Update HairColour nếu @HairColour là không Null

+0

Wow: 5 phút của sự im lặng, sau đó 4 người trả lời điều tương tự tại cùng lúc. :-) – Heinzi

+0

Haha tôi biết nó tuyệt vời phải không. –

Trả lời

24

Id sử dụng liên hiệp cho việc này: http://msdn.microsoft.com/en-us/library/ms190349.aspx

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

Tham chiếu MySQL: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html# function_coalesce – dnagirl

+0

Cảm ơn bạn rất nhiều vì đã giúp đỡ bạn. Tôi đã nghĩ đến việc sử dụng chức năng này nhưng không thể hiểu nó hoạt động chính xác như thế nào. Chúc mừng làm việc một giấc mơ –

13

Sau đây nên làm việc:

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

Nó sử dụng SQL Server ISNULL chức năng, trong đó trả

  • giá trị đầu tiên nếu nó không rỗng,
  • hoặc, nếu không, giá trị thứ hai (trong trường hợp này, là giá trị hiện tại của hàng).
+0

Điều này cũng hoạt động cũng như sử dụng kết hợp. Cảm ơn bạn đã giúp đỡ.Xin lỗi tôi đã chấp nhận câu trả lời khác vì họ đã trả lời lần đầu tiên. –

2

Đặt cột bằng chính nó với vòng tròn tròn, nó đặt nó vào thông số của bạn.

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

Đó không phải là câu hỏi. Trích dẫn: "cập nhật các giá trị cho người này, nhưng chỉ khi giá trị * mới * không rỗng" – Heinzi

4

Bạn có thể sử dụng isnull chức năng:

update Person 
set 
    Car = isnull(@Car, Car), 
    HairColour = isnull(@HairColour, HairColour), 
    FavDrink = isnull(@FavDrink, FavDrink), 
    FavFood = isnull(@FavFood, FavFood) 
where PersonalID = @PersonalID 
Các vấn đề liên quan