# sql：结果集中没有行

- **ID:** `go/sql-no-rows-in-result-set`
- **领域:** go
- **类别:** data_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

QueryRow.Scan 未找到匹配行。代码将 sql.ErrNoRows 当作致命错误而非正常的未找到情形。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 1.18 | active | — | — |
| 1.21 | active | — | — |

## 解决方案

1. **** (93% 成功率)
   ```
   err := db.QueryRowContext(ctx, q, id).Scan(&u.Name)
if errors.Is(err, sql.ErrNoRows) {
  return nil, ErrNotFound
}
return &u, err
   ```
2. **** (82% 成功率)
   ```
   Use SELECT COUNT(*) first when existence matters, or return a typed ErrNotFound.
   ```

## 无效尝试

- **** — Still returns zero rows; the error handling issue remains. (70% 失败率)
- **** — Does not change the no-rows case. (85% 失败率)
