【问题标题】:LLBGen 5.3 & MS SQL Server 2012: paging query but no OFFSET xxx FETCH in generated SQLLLBGen 5.3 & MS SQL Server 2012:分页查询但在生成的 SQL 中没有 OFFSET xxx FETCH
【发布时间】:2019-05-23 09:04:48
【问题描述】:
collection.GetMulti(filter, 0, sorter, relations, path, 1, 10);

生成的 SQL:

    SELECT
        ...
    FROM
        ((((
                        [NewsDB].[dbo].[Article]
                        INNER JOIN [NewsDB].[dbo].[OnlineArticle] ON [NewsDB].[dbo].[Article].[ArticleID] = [NewsDB].[dbo].[OnlineArticle].[OnlineArticleID] 
                        )
                    INNER JOIN [NewsDB].[dbo].[CategoryOnlineArticle] ON [NewsDB].[dbo].[OnlineArticle].[OnlineArticleID] = [NewsDB].[dbo].[CategoryOnlineArticle].[OnlineArticleID] 
                    )
                INNER JOIN [NewsDB].[dbo].[Category] ON [NewsDB].[dbo].[Category].[CategoryID] = [NewsDB].[dbo].[CategoryOnlineArticle].[CategoryID] 
                )
            LEFT JOIN [NewsDB].[dbo].[OldOnlineArticle] ON [NewsDB].[dbo].[OnlineArticle].[OnlineArticleID] = [NewsDB].[dbo].[OldOnlineArticle].[OnlineArticleID] 
        ) 
    WHERE
        (
            (
                (
                    [NewsDB].[dbo].[Article].[IsDeleted] = @p1 
                    AND [NewsDB].[dbo].[Article].[IsArchive] = @p2 
                    AND [NewsDB].[dbo].[Article].[NavigateType] = @p3 
                    AND [NewsDB].[dbo].[Article].[Status] = @p4 
                    AND [NewsDB].[dbo].[OnlineArticle].[IsOnlinePublished] = @p5 
                    AND [NewsDB].[dbo].[OnlineArticle].[OnlinePublishDateUtc] <= @p6 
                ) 
                AND [NewsDB].[dbo].[OnlineArticle].[SiteNewsPortalID] = @p7 
                AND [NewsDB].[dbo].[Category].[IsDeleted] = @p8 
                AND [NewsDB].[dbo].[Category].[IsEnable] = @p9 
                AND [NewsDB].[dbo].[Category].[CategoryType] = @p10 
                AND [NewsDB].[dbo].[Category].[CategoryID] = @p11 
            ) 
        AND ( [NewsDB].[dbo].[OnlineArticle].[OnlineArticleID] IS NOT NULL )) 
    ORDER BY
        [NewsDB].[dbo].[OnlineArticle].[RefreshDateUtc] DESC,
        [NewsDB].[dbo].[OnlineArticle].[OnlinePublishDateUtc] DESC

我在生成的 SQL 中没有看到 OFFSET xxx FETCH xxx。

我还将兼容级别设置为SqlServerCompatibilityLevel.SqlServer2005

如何使 OFFSET xxx FETCH 在生成的 SQL 中可用?请帮忙。

【问题讨论】:

    标签: sql-server llblgenpro llblgen


    【解决方案1】:

    OFFSET/FETCH 在兼容性级别设置为 SqlServer2012 时使用。在The SQL differences per compatibility mode 上查看更多信息。

    您在哪里查看生成的 SQL?确保您正在查看要执行的最终查询,因为您可能会在内置分页之前看到该查询。

    最后,在某些情况下,无法在服务器端进行分页,因此它是在客户端使用数据读取器执行的。 Quoting the documentation:

    分页通常发生在服务器上,但是 LLBLGen Pro 运行时框架在数据读取器处切换到客户端分页 如果无法生成分页查询而不会导致错误的级别 服务器。如果存在 DISTINCT 违规构造,则会发生这种情况 在 SQL 查询中,例如不能与 DISTINCT 或 对不在投影中的字段进行排序。这 datareader 级别的分页是有效的(它丢弃之前的所有行 要读取的页面并在要读取的页面完全读取后停止读取数据 read) 但是可能比服务器端的分页查询要慢。

    判断框架是否切换到客户端分页/ 不同的过滤/行限制,它将附加到 SQL 查询 向 ORMQueryExecution 跟踪器输出一个字符串,该字符串表示: “需要客户端分页”,“需要客户端不同 过滤”和“需要客户端限制”,如果 ORMQueryExecution 跟踪器设置为级别 4(详细)

    希望对您有所帮助。顺便说一句,您可以使用LLBLGen Pro Forums

    【讨论】:

      猜你喜欢
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 2021-02-10
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      相关资源
      最近更新 更多