sql-server - sql statement.exec 错误:mssql:“?”附近的语法不正确
问题描述
我需要帮助理解这个错误。该代码适用于 sqlite。看起来 sql包?
甚至没有放一个值,而是按原样发送问号。我可以毫无问题地运行其他选择语句,因此它不是连接问题或类似问题。
错误:“?”附近的语法不正确
func TestSQLServerInsert(t *testing.T) {
db, err := sql.Open("sqlserver", "my_trusted_string")
//db, err := sql.Open("sqlite3", "../data/utm_info.db")
if err != nil {
t.Errorf("could not open database: %v", err)
}
defer db.Close()
c := controller.NewC(db)
u := controller.UtilizationResponse{
Snapshot: []int{46, 22, 4, 4, 5, 3, 0, 8, 49},
History: []float32{55.1, 47.2, 0.3, 33.4, 23.5},
Time: time.Now(),
}
affectedRows, err := c.InsertUtil(u)
if err != nil {
t.Errorf("could not insert into db: %v", err)
}
var count int64 = 1
assert.Equal(t, affectedRows, count)
}
// InsertUtil response inserts a new record into the database
func (c *Controller) InsertUtil(u UtilizationResponse) (rowsAffected int64, err error) {
return insertUtil(c.DB, u)
}
func insertUtil(db *sql.DB, u UtilizationResponse) (int64, error) {
stmt, err := db.Prepare("INSERT INTO Utilization VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)")
if err != nil {
return 0, err
}
res, err := stmt.Exec(
u.Time,
u.Snapshot[0],
u.Snapshot[1],
u.Snapshot[2],
u.Snapshot[3],
u.Snapshot[4],
u.Snapshot[5],
u.Snapshot[6],
u.Snapshot[7],
u.Snapshot[8],
u.History[0],
u.History[1],
u.History[2],
u.History[3],
u.History[4],
)
if err != nil {
return 0, err
}
rowCnt, err := res.RowsAffected()
if err != nil {
return 0, err
}
return rowCnt, nil
}
type UtilizationResponse struct {
Snapshot []int `json:"snapshot,omitempty"`
History []float32 `json:"history,omitempty"`
Time time.Time `json:"time,omitempty"`
}
解决方案
sqlserver 驱动程序使用普通的MS SQL Server 语法,并期望 sql 查询中的参数采用 @Name 或 @p1 到 @pN(序号位置)的形式。
insertSql := "insert into test (id, idstr) values (@p1, @p2)"
经过一些测试,我可以确认它有效。它甚至可以与 sqlite3 一起使用,因此这似乎是一种更广泛接受的方式。
推荐阅读
- javascript - 提供给“BootstrapTable”的“字符串”类型的无效道具“selectRow”,预期为“对象”
- python - 如何设置每辆车访问的最小节点数或设置每辆车的最短行驶时间?
- javascript - 来自网站的真实示例的原型(单独)和构造函数(单独)?
- python - Python 语法问题 - TypeError:未找到必需的参数“名称”(位置 1)
- mysql - 预订:我想显示所有记录的条件,包括表号 2 中的记录是否为空
- php - 使用 PHP 解析(第 3 次)嵌套 JSON
- excel - 为什么 POIUtil.cfc 电子表格代码显示一些数字不正确?
- flutter - 如何在flutter项目中实现下拉加载更多数据,而不是下拉刷新数据的效果?
- python - 如何在 django 中通过 unidecode 保存用户名(电话)和密码?
- eclipse-rcp - 在 Eclipse 工具栏中添加分隔符