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

dav*_*mcd 2 sql sql-server conditional

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

UPDATE Table
   SET Name = @Name,
       Email = @Email,
       Phone = @Phone
 WHERE id = @id
Run Code Online (Sandbox Code Playgroud)

编辑:

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

  @Name = Tom
  @Email = NULL
  @Phone = NULL
Run Code Online (Sandbox Code Playgroud)

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

Bra*_*vic 5

这个基本想法应该有效:

UPDATE Table
   SET Name = ISNULL(@Name, Name),
       Email = ISNULL(@Email, Email),
       Phone = ISNULL(@Phone, Phone)
 WHERE id = @id
Run Code Online (Sandbox Code Playgroud)

所以如果@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
Run Code Online (Sandbox Code Playgroud)