Хранилище запросов SQL Server: [sys.query_store_query_text].[Query_sql_text] урезано?

Я работаю со следующим запросом к хранилищу запросов:

SELECT 
TOP 100
    qp.last_execution_time [qp__last_execution_time],
    qt.query_sql_text,
    len(qt.query_sql_text) sql_length,      
    round(rs.avg_duration ,5) avg_duration
    ,max_rowcount,avg_rowcount,last_rowcount
FROM 
    sys.query_store_plan qp
    INNER JOIN sys.query_store_query         [q]        ON qp.query_id = q.query_id
    INNER JOIN sys.query_store_query_text    [qt]       ON q.query_text_id = qt.query_text_id
    INNER JOIN sys.query_store_runtime_stats [rs]       ON qp.plan_id = rs.plan_id
WHERE
order by len(qt.query_sql_text) desc

Что я замечаю, так это то, что кажется, что [query_sql_text] усекается, например, типичное утверждение заканчивается на:

CAST( '20170920 00:00:00' AS datetime),CAST( '20140701 00:00:

Возможно актуально:
SQL в этом случае генерируется Power BI.
Значение len(qt.query_sql_text) не увеличивается при том же значении, когда текст обрезается.
Я просматриваю SQL путем копирования / вставки из области результатов SSMS в блокнот.

Версия SQL: Microsoft SQL Azure (окончательная первоначальная версия) - 12.0.2000.8 29 августа 2017 г. 13:06:11

В некоторых других "системных таблицах" я вспоминаю, что SQL Server усекает SQL.

Поэтому вопрос заключается в следующем: может ли кто-нибудь однозначно сказать, может ли [sys.query_store_query_text]. [Query_sql_text] в некоторых случаях быть усеченным самим SQL Server?

Альтернативная возможность, усечение, происходящее в клиентском приложении, не имеет никакого смысла, так как он должен отправить полный, действительный оператор SQL на SQL Server, иначе как он мог бы быть выполнен? И все же, отклонение в len (query_sql_text) исключает превышение ограничения длины столбца.

Что здесь может происходить?

1 ответ

Решение

SSMS будет обрезать результаты BLOB-объектов при возврате данных в сетку данных. Вы можете изменить длину в параметрах запроса или вернуть данные в формате XML. НАПРИМЕР

SELECT 
TOP 100
    qp.last_execution_time [qp__last_execution_time],
    qt.query_sql_text,
    len(qt.query_sql_text) sql_length,      
    round(rs.avg_duration ,5) avg_duration
    ,max_rowcount,avg_rowcount,last_rowcount
FROM 
    sys.query_store_plan qp
    INNER JOIN sys.query_store_query         [q]        ON qp.query_id = q.query_id
    INNER JOIN sys.query_store_query_text    [qt]       ON q.query_text_id = qt.query_text_id
    INNER JOIN sys.query_store_runtime_stats [rs]       ON qp.plan_id = rs.plan_id
order by len(qt.query_sql_text) desc
for xml path

Или получить каждый запрос в отдельном столбце XML:

SELECT 
TOP 100
    qp.last_execution_time [qp__last_execution_time],
    ( select qt.query_sql_text for xml path, type ) query_sql_text,
    len(qt.query_sql_text) sql_length,      
    round(rs.avg_duration ,5) avg_duration
    ,max_rowcount,avg_rowcount,last_rowcount
FROM 
    sys.query_store_plan qp
    INNER JOIN sys.query_store_query         [q]        ON qp.query_id = q.query_id
    INNER JOIN sys.query_store_query_text    [qt]       ON q.query_text_id = qt.query_text_id
    INNER JOIN sys.query_store_runtime_stats [rs]       ON qp.plan_id = rs.plan_id

order by len(qt.query_sql_text) desc

Или получите текст запроса из пользовательского интерфейса XEvents в SSMS.

Другие вопросы по тегам