从sys.dm_exec_text_query_plan中选择时,计划未显示为超链接

时间:2019-03-27 17:38:38

标签: sql-server ssms

我想查看在SQLServer上执行的查询的缓存计划。

当我从sys.dm_exec_query_plan查询计划时,SQLServer Management Studio很好地将计划显示为超链接。我单击此链接,将打开一个新标签并显示计划。

SELECT p.query_plan
FROM sys.dm_exec_cached_plans ps
OUTER APPLY sys.dm_exec_query_plan(ps.plan_handle) p

我阅读的sys.dm_exec_query_plan在某些情况下可能会返回NULL,因此想从sys.dm_exec_text_query_plan查询我的计划数据

SELECT p.query_plan
FROM sys.dm_exec_cached_plans ps
OUTER APPLY sys.dm_exec_text_query_plan(ps.plan_handle, 0, -1) p

现在,在结果窗格中,查询计划未显示为超链接。如何在图形显示中查看该计划?

1 个答案:

答案 0 :(得分:1)

query_plan中的dm_exec_query_plan显示超链接的原因是它具有XML数据类型,其中此列是NVARCHAR(MAX)中的dm_exec_text_query_plan数据类型。 。您可以将该列从dm_exec_text_query_plan转换为XML,以与dm_exec_query_plan相同的格式显示,但是对于较大的计划,有时会失败,并出现XML datatype instance has too many levels of nested nodes. Maximum allowed depth is 128 levels.错误。一种选择是使用TRY_CONVERT仍然查看某些计划,尽管较大的计划仍然为空。请注意,使用COALESCEISNULL替换query_plan的{​​{1}}列中的空值将不起作用,因为dm_exec_text_query_plan的结果的数据类型将是优先级较高的数据类型(在这种情况下为XML),对于COALESCE,这将是第一个参数的数据类型,从而导致与以前相同的XML转换错误。如果要从ISNULL查看更大的计划,则可能需要研究其他选项,例如C#。

dm_exec_text_query_plan