Golang Gorm 查询 SQL Server 数据库单条记录时报错: 在 FETCH 语句中选项 NEXT 的用法无效

文章目录

    用 Golang 的 Gorm ORM 库,总是有惊喜。这也是为何我一直想转投 ASP.NET EF Core 的原因。这个 Gorm 真的太山寨了。

    今天在查询 SQL Server 数据库中的单条记录时,又出现了诡异的问题:

    mssql: 在 FETCH 语句中选项 NEXT 的用法无效。

    这个错误对应的英文错误信息是:

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

    sql server 版本

    版本号 sql server 11.0.2100,对应的版本是 SQL Server 2012

    报错代码

    下面的 golang 代码报错:

    var site models.Site 
    err := models.MSDB.Where("`id` = ?", id).First(&site).Error
    

    对应的生成 SQL:

    SELECT * FROM "site" WHERE `id` = 167845 ORDER BY "site"."ID" OFFSET 0 ROW FETCH NEXT 1 ROWS ONLY
    

    网上查询了一下,是低版本的 SQL Server 不支持 FETCH NEXT 语法,而 Gorm 也没有做兼容。

    解决方法

    改成 Find

    err := models.MSDB.Find(&site, id).Error
    

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式