2017-01-14 7 views
0

現在MariaDBデータベースと通信するGolangアプリケーションで作業しています。私のサービスは*Userになり、一致するレコードを更新しようとします。例えば提供された値が空でない場合にMariaDBカラムを更新する文字列

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 
} 

しかし、私が供給されていないフィールドを更新する必要はありません。私はSQLがCASEステートメントを使用して更新することができますが、私は見ていないことを見てきた

`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=?` 

:私は、提供される一つの空の文字列であれば、それは値を更新しないと、これに近い何か、を探しています同じ変数をExec()に何度も提供せずにこれを使用する方法です。このよう

+0

"が供給されていない" ん空の文字列としてでてくる、または 'NULL'として一度だけ、各パラメータを渡すには? –

答えて

2

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

または

UPDATE Users 
SET FirstName = coalesce(?, FirstName) 
+0

同じ変数を2回続けて渡す必要はありませんか? – Gavin

+0

はい............ –

+0

それは私の唯一の選択肢ですか? – Gavin

関連する問題