MySQL 单次更新查询,不更新非空值

MySQL Single update query, without updating non-null values

给定一个 SQL 语句:

const string UpdateString = @"UPDATE users SET hash=@new_hash, firstname=@new_firstname, lastname=@new_lastname WHERE id=@id";

然后我加载到一个 MySqlCommand 对象:

var cmd = new MySqlCommand(UpdateString , connection))
cmd.Prepare();
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@new_hash", hash);

如果我不添加所有参数,则会抛出异常。

我如何才能只更新名字,而不更新散列,而不必为单个或分组列更新的每个可能组合编写单独的更新命令字符串?

如果您不想更新 hash,则使用此查询为该参数添加 null

UPDATE users 
SET hash = case when @new_hash is null then hash else @new_hash end, 
    firstname = @new_firstname, 
    lastname = @new_lastname 
WHERE id = @id