Я написал код Golang для обновления записей в таблице. В этом я использовал функцию db.Exec(query)
, чтобы выполнить запрос и получить результат обратно. Я также хочу проверить количество строк, затронутых запросом. Для этого я использовал result.RowsActed (). Но я не получаю правильное количество строк, на которые влияют.
Ниже мой Golang Код
func updateTable(dbconnection *sql.DB, query string) (int64, error) {
println("\n------------------Executing update Query---------------------")
query = `UPDATE [IMBookingApp].[dbo].[User]
SET Password='xyz'
WHERE UserId=2 OR UserId=22 OR UserId=23`
result, err := dbconnection.Exec(query)
if err != nil {
fmt.Println("Error updating row: " + err.Error())
errorMsg := errors.New("DATABASE ERROR - " + err.Error())
return 0, errorMsg
}
RowsAffected, err := result.RowsAffected()
if err != nil {
fmt.Println("RowsAffected Error", err)
}
fmt.Println("Table updated successfully. Rows Affected:", RowsAffected)
return RowsAffected, nil
}
Вывод, который я получаю, выглядит следующим образом: -
Table updated successfully. Rows Affected: 7
В приведенном выше запросе SQL, для условия - WHERE UserId=2 OR UserId=22 OR UserId=23
вывод равен Rows Affected: 7
Однако я должен быть 3 или меньше 3, потому что UserId is a primary key
.
В SSMS я получаю правильный результат для того же запроса -
Аналогично, для WHERE UserId=2
вывод равен Rows Affected: 5
WHERE UserId=2 OR UserId=22
вывод Rows Affected: 6
WHERE UserId=2 OR UserId=22 OR UserId=23
вывод Rows Affected: 7
WHERE UserId=2 OR UserId=22 OR UserId=23 OR UserId=24
вывод Rows Affected: 8
и "Затронутые строки" продолжается увеличивая на 1 каждый раз.
Понятия не имею, что происходит. Буду признателен, если кто-нибудь поможет мне указать на проблему с кодом.
РЕДАКТИРОВАТЬ
Я также пытался использовать db.Query(query)
как показано ниже, чтобы найти затронутые строки, я все же ошибаюсь, нет затронутых строк.
rows, err := dbconnection.Query(query)
if err != nil {
panic(err)
}
var RowsAffected int
for rows.Next() {
RowsAffected += 1
}
if err := rows.Err(); err != nil {
panic(err)
}
print("RowsAffected:", RowsAffected)