当提供的值不是空字符串时更新 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)
我目前正在开发一个与 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)