我目前正在开发一个与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()
提供相同的变量。
答案 0 :(得分:2)
喜欢这个
UPDATE Users
SET FirstName = case when ? is null then FirstName else ? end
或仅传递一次参数
UPDATE Users
SET FirstName = coalesce(?, FirstName)