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

更新日期: 2024-09-09 阅读次数: 672 字数: 224 分类: golang

用 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 聊聊, 查看更多联系方式

tags: gorm