sql - Finding Problematic Queries -


the below query runs in sql server 2008 not working in sql server 2012. why?

select top 20     total_worker_time / execution_count avg_cpu_time,     execution_count,     total_elapsed_time / execution_count avg_run_time,     total_elapsed_time,     (select         substring(text, statement_start_offset / 2 + 1, statement_end_offset)     sys.dm_exec_sql_text(sql_handle))     query_text sys.dm_exec_query_stats order avg_cpu_time desc 

statement_end_offset means statement_end_offset number of characters executing batch or stored procedure @ executing statement ends.

issue : statement_end_offset returns -1 value @ gives error : "invalid length parameter passed left or substring function".

use below modified query work in sql server version :-

select top 20 total_worker_time/execution_count [avg cpu time],   substring(st.text, (qs.statement_start_offset/2)+1,        ((case qs.statement_end_offset         when -1 datalength(st.text)        else qs.statement_end_offset        end - qs.statement_start_offset)/2) + 1) query_text   sys.dm_exec_query_stats qs   cross apply sys.dm_exec_sql_text(qs.sql_handle) st   order total_worker_time/execution_count desc;