LLBGen 5.3 и MS SQL Server 2012: пейджинговый запрос, но нет FETCH OFFSET xxx в сгенерированном SQL - PullRequest
0 голосов
/ 23 мая 2019
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

Я не вижу OFFSET xxx FETCH xxx в сгенерированном SQL.

Я также установил совместимый уровень на SqlServerCompatibilityLevel.SqlServer2005.

Как сделать OFFSET xxx FETCH доступным в сгенерированном SQL? Пожалуйста, помогите.

1 Ответ

0 голосов
/ 27 мая 2019

OFFSET/FETCH используется, когда уровень совместимости установлен на SqlServer2012.См. Дополнительную информацию на Различия SQL для режима совместимости .

Где вы смотрите сгенерированный SQL?Убедитесь, что вы просматриваете последний запрос для выполнения, так как вы можете видеть запрос непосредственно перед созданием подкачки.

И, наконец, существуют ситуации, когда невозможно выполнить подкачку на уровне сервера.Таким образом, это выполняется на стороне клиента с помощью считывателя данных. Цитирование документации :

Пейджинг обычно происходит на сервере, однако среда выполнения LLBLGen Pro переключается на пейджинг на стороне клиента на уровне устройства чтения данных, если пейджинговый запрос не можетгенерироваться, не вызывая ошибок на сервере.Это происходит, если в запросе SQL присутствует конструкция, нарушающая DISTINCT, например, тип, который не должен использоваться с DISTINCT, или порядок в поле, которого нет в проекции.Пейджинг на уровне устройства чтения данных эффективен (он отбрасывает все строки перед страницей для чтения и останавливает чтение данных после того, как страница для чтения полностью прочитана), однако может выполняться медленнее, чем запрос на пейджинг на стороне сервера.

Чтобы определитьнезависимо от того, переключена ли платформа на пейджинг на стороне клиента / отдельную фильтрацию / ограничение строк, она добавит к выводу SQL-запроса к трассировщику ORMQueryExecution строку, которая сигнализирует: «Требуется пейджинг на стороне клиента», «Требуется отдельная фильтрация на стороне клиента» и «Требуется ограничение на стороне клиента ", если для трассировщика ORMQueryExecution задан уровень 4 (подробный)

Надеюсь, это поможет.Кстати, вы можете использовать LLBLGen Pro Forums

...