当提供的值不是空字符串时更新 MariaDB 列

Update MariaDB column when provided value is not empty string

我目前正在开发一个与 MariaDB 数据库对话的 Golang 应用程序。我的服务将接收 *User 并尝试更新匹配记录。

例如:

func (d *database) UpdateUser(user *User) error {
    stmt, err := d.Prepare(`UPDATE Users
        SET FirstName=?, LastName=?, Email=?, Address1=?, Address2=?,
            City=?, State=?, Country=?, PostalCode=?
        WHERE Id=?`)
    if err != nil {
        return err
    }

    _, err := res, err := stmt.Exec(user.FirstName, user.LastName, user.Email,
        user.Address1, user.Address2, user.City, user.State, user.Country, 
        user.PostalCode, user.Id)
    return err
}

但是,我不想更新未提供的字段。我正在寻找更接近这个的东西,如果提供的是空字符串,它不会更新值:

`UPDATE Users
 SET FirstName=? OR FirstName, LastName=? OR LastName, Email=? OR Email, 
     Address1=? OR Address1, Address2=? OR Address2, City=? OR City, 
     State=? OR State, Country=? OR Country, PostalCode=? OR PostalCode
 WHERE Id=?`

我已经看到 SQL 允许使用 CASE 语句进行更新,但我没有看到在不多次向 Exec() 提供相同变量的情况下使用它的方法.

像这样

UPDATE Users
SET FirstName = case when ? is null then FirstName else ? end

或者每个参数只传递一次

UPDATE Users
SET FirstName = coalesce(?, FirstName)