'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);
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM