在 SQL Server 中,在哪种情况下,查询计划包含<ParameterList>标记?



我正在使用以下查询从SQL Server数据库中获取查询计划:

SELECT st.text as parameterized_query,[qp].[query_plan]
FROM sys.dm_exec_cached_plans cp 
CROSS APPLY sys.dm_exec_sql_text ( cp.plan_handle ) st 
CROSS APPLY sys.dm_exec_query_plan ( cp.plan_handle ) qp

  1. 我发现,如果我在查询中使用DECLARESET,则:

    1.1。parameterized_query是:DECLARE @p1 INT; SET @p1 = 1; SELECT * FROM a WHERE ID > @p1

    1.2。query_plan 不包含 <ParameterList>标签。

  2. 在某些其他情况下(我不了解(:

    2.1。parameterized_query类似于:(@p1 INT)SELECT * FROM a WHERE ID > @p1

    2.2。query_plan 包含 <ParameterList>标签。

发生案例2时?

如果将 AUTO PARAMETERIZATION设置为ON,则SQL Server将使用参数编译某些查询,则在标签中列出了在编译时间中传递的值。

您可能会发现此链接有用:http://www.benjaminnevarez.com/2010/06/auto-parameterization-in-sql-server/

最新更新