隐藏

'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。

发布:2023/12/8 17:04:28作者:管理员 来源:本站 浏览次数:765


在使用asp.net core的时候,采用take().skip()分页的时候报如下错误:

SqlException: 'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。

这个主要是在sql server 2008中,不支持FETCH和NEXT语句(sql server 2012才支持)。

之后在网上参考了一下其他的文章,最终解决了这个问题,记录一下,方便后来人。

解决方法:


public static class DbContextOptionsBuilderExtensions

{

/// <summary>

/// SQL Server specific extension method for Microsoft.EntityFrameworkCore.DbContextOptionsBuilder

/// </summary>

/// <param name="optionsBuilder">Database context options builder</param>

/// <param name="services">Collection of service descriptors</param>

public static void UseSqlServerWithLazyLoading(this DbContextOptionsBuilder optionsBuilder, IServiceCollection services)

{

var nopConfig = services.BuildServiceProvider().GetRequiredService<NopConfig>();


var dataSettings = DataSettingsManager.LoadSettings();

if (!dataSettings?.IsValid ?? true)

return;


var dbContextOptionsBuilder = optionsBuilder.UseLazyLoadingProxies();

//'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。

//在使用asp.net core的时候,采用take().skip()分页的时候报如下错误:SqlException: 'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。这个主要是在sql server 2008中,不支持FETCH和NEXT语句(sql server 2012才支持)。

nopConfig.UseRowNumberForPaging = true;

if (nopConfig.UseRowNumberForPaging)

dbContextOptionsBuilder.UseSqlServer(dataSettings.DataConnectionString, option => option.UseRowNumberForPaging());

else

dbContextOptionsBuilder.UseSqlServer(dataSettings.DataConnectionString);

}

}