MS SQL限制选项不起作用

时间:2018-03-22 12:51:34

标签: sql-server go go-gorm

我已经构建了一个添加了一些条件语句的查询。它们都工作正常,但当我输入限制选项时,我只会出错。

所以我使用Gorm和Gin框架去1.10。这是我目前的工作代码,

qb := myDB.Table("table").Select("xx, xxx, xxx, xxx")

rows, err := qb.Rows()

if err != nil {
    fmt.Println(err)
}

defer myDB.Close()

return rows

这一切都有效,但是当我在任何地方添加限制时,例如在桌子之前或之后,我尝试了两种但是并没有真正认为它有所作为?例如,

qb := myDB.Table("table").Limit(3).Select("xx, xxx, xxx, xxx")

现在我知道MS SQL没有使用限制但在select语句中使用TOP(如果不是唯一的用例,请原谅我,仍然没有使用MS SQL。)

我得到的错误是,

mssql: Invalid usage of the option NEXT in the FETCH statement.

现在我在Gorm' GitHub上找到了以下内容,https://github.com/jinzhu/gorm/issues/1205

他们有一个解决方法,但这对我不起作用。该家伙还发布了更新的功能来纠正这个问题。但是,我不确定如何更新第三方库中的代码。这也是2016年发布的,所以不确定该代码是否已经添加到Gorm代码库中。

3 个答案:

答案 0 :(得分:1)

您需要Order By在发送到SQL Server的生成的SQL中使用OFFSET + FETCH,这将由您的ORM添加

  

......必须满足以下条件:

     

...

     

ORDER BY子句包含一列或一组列   保证是独一无二的。

GORM如何做到,我不知道

答案 1 :(得分:0)

我发布这个作为答案,我正在招待更多的工作,如果不出于任何原因不推荐,请告诉我。

我的工作解决方案,

qb := myDB.Table("table").Select("TOP(?) xx, xxx, xxx, xxx", 3)

由于

答案 2 :(得分:0)

我面临类似的问题。通过添加.Order这样工作:

{{1}}