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


    在使用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);
    }
    }

  • 相关阅读:
    Attacklab markup
    Bomblab markup
    Diary & Solution Set 多校度假
    Solution 「CF 590E」Birthday
    MySQL 避坑宝典 来自小米的开源工具
    Hive SQL语法Explode 和 Lateral View
    「Ynoi2006」rsrams
    「Gym103069C」Random Shuffle
    「UOJ498」新年的追逐战
    「Nowhere」Helesta
  • 原文地址:https://www.cnblogs.com/huangzhen22/p/10767901.html
Copyright © 2020-2023  润新知