我正在使用以下查询从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
我发现,如果我在查询中使用
DECLARE
和SET
,则:1.1。
parameterized_query
是:DECLARE @p1 INT; SET @p1 = 1; SELECT * FROM a WHERE ID > @p1
1.2。
query_plan
不包含<ParameterList>
标签。在某些其他情况下(我不了解(:
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/