sql - 使用 golang 和 sqlserver 驱动程序进行参数查询

标签 sql sql-server rest go

我正在尝试通过我的 sql server 数据库中的 ID 获取特定项目。这是我的代码:

var(
    allArticlesQry string = "SELECT * FROM Articles"
    findArticlesQry string = "SELECT * FROM Articles WHERE Id = ?1"
)

func FindArticle(w http.ResponseWriter, r *http.Request){
    vars := mux.Vars(r)
    var id = vars["id"]
    var article Article

    db := connect()
    defer db.Close()

    stmt, err := db.Prepare(findArticlesQry)    
    if err != nil{
        log.Fatal(err)
    }
    defer stmt.Close()

    err = stmt.QueryRow(id).Scan(&article.Title, &article.Description, &article.Body, &article.Id)
    if err != nil{
        log.Fatal(err)
    }

    w.Header().Set("Content-Type", "application/json; charset=UTF-8")
    w.WriteHeader(http.StatusOK)
    json.NewEncoder(w).Encode(u.HttpResp{Status: 200, Body: article})
}

我正在使用 this package对于 sqlserver 驱动程序,它有一个应该可以正常工作的示例:db.Query("SELECT * FROM t WHERE a = ?3, b = ?2, c = ?1", "x", "y", "z")

但每次我尝试调用此函数时,它都会失败并返回: 2017/09/01 16:31:01 mssql:“?”附近的语法不正确。

所以我真的不明白为什么我的查询不起作用..

编辑

我尝试了另一种方法,我删除了在执行之前准备查询的部分,现在它不会让我的服务器崩溃,我有一个响应,但问题仍然是一样的:

var row = db.QueryRow(findArticlesQry, id).Scan(&article.Title, &article.Description, &article.Body, &article.Id)

响应:

{
    "status": 200,
    "description": "",
    "body": {
        "Number": 102,
        "State": 1,
        "Class": 15,
        "Message": "Incorrect syntax near '?'.",
        "ServerName": "DESKTOP-DLROBC4\\LOCALHOST",
        "ProcName": "",
        "LineNo": 1
    }
}

最佳答案

根据您的评论,您使用的是 sqlserver 驱动程序,而不是 mssql 驱动程序,因此您使用了错误的参数格式。根据文档:

The sqlserver driver uses normal MS SQL Server syntax and expects parameters in the sql query to be in the form of either @Name or @p1 to @pN (ordinal position).

db.QueryContext(ctx, "select * from t where ID = @ID;", sql.Named("ID", 6))

因此,您应该将查询更改为:

var(
    allArticlesQry string = "SELECT * FROM Articles"
    findArticlesQry string = "SELECT * FROM Articles WHERE Id = @p1"
)

关于sql - 使用 golang 和 sqlserver 驱动程序进行参数查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46002760/

相关文章:

sql - 自定义排序顺序 - 如何不重复 Case 语句

mysql - MSSQL 到 MYSQL 迁移 : Collation equivalent for SQL_LATIN1_GENERAL_CPI_CI_AS

python - 如何协调 REST 和 JSONschema?

web-services - 用groovy创建一个 Restful Web服务,该服务在GET请求中从数据库返回值

sql - 为什么选择在 varchar 比较中消除 NULL 记录

sql - 从 SQL Server 数据库中删除用户?

c# - 从用户定义的类创建 SQL Server 表

c# - 错误查询 Sql Server 插入,不正确的值格式 C#

php - GET 与 POST 最佳实践

SQL查找具有相邻数字的行