SQL:如何进行只更新非空值的更新?

时间:2011-12-09 20:18:15

标签: sql sql-server conditional

如何运行如下所示的UPDATE,它只更新非空的列?

UPDATE Table
   SET Name = @Name,
       Email = @Email,
       Phone = @Phone
 WHERE id = @id

编辑:

因此,如果我使用上述更新,但会分配以下内容......

  @Name = Tom
  @Email = NULL
  @Phone = NULL

因此,只有名称会被更新,电子邮件和电话数据库中的任何内容都将保留在数据库中。

2 个答案:

答案 0 :(得分:5)

这个基本想法应该有效:

UPDATE Table
   SET Name = ISNULL(@Name, Name),
       Email = ISNULL(@Email, Email),
       Phone = ISNULL(@Phone, Phone)
 WHERE id = @id

因此,如果@Name为NULL,则Name保持不变。如果@Name 为NULL,则会将其分配给Name等...

---编辑---

当然@clintp,COALESCE变体看起来像这样:

UPDATE Table
   SET Name = COALESCE(@Name, Name),
       Email = COALESCE(@Email, Email),
       Phone = COALESCE(@Phone, Phone)
 WHERE id = @id

答案 1 :(得分:2)

如果我正确理解了这个问题:

SET Name = CASE WHEN Name IS NULL THEN NULL ELSE @Name END  ...