SQL 服务器查询存储:[sys.query_store_query_text].[query_sql_text] 被截断了?

SQL Server Query Store: [sys.query_store_query_text].[query_sql_text] is truncated?

我正在对查询存储使用以下查询:

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) 不会达到相同的最大值。
我正在从 SSMS 结果窗格到记事本中查看 SQL by copy/pasting。

SQL 版本:Microsoft SQL Azure (RTM) - 12.0.2000.8 2017 年 8 月 29 日 13:06:11

我记得在其他 "system tables" 中 SQL 服务器截断 SQL。

所以问题是:谁能明确地说 [sys.query_store_query_text].[query_sql_text] 在某些情况下是否可以被 SQL 服务器本身截断?

另一种可能性,在客户端应用程序中发生截断,没有任何意义,因为它必须向 SQL 服务器发送完整、有效的 SQL 语句,否则怎么可能执行?然而,len(query_sql_text) 中的方差排除了超过列长度限制的可能性。

这里可能发生了什么?

SSMS 将在return将数据发送到数据网格时截断 blob 结果。您可以在查询选项中修改长度,或者return数据为XML。 EG

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

或者从 SSMS 中的 XEvents UI 获取查询文本。