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