以下查询在SQL Server 2008中运行,但在SQL Server 2012中无效。为什么?
nogil
答案 0 :(得分:1)
statement_end_offset 表示statement_end_offset是当前正在执行的批处理或存储过程中当前正在执行的语句结束的字符数。
问题: statement_end_offset有时会返回-1 值,因为它会给出错误:"传递给LEFT或SUBSTRING函数的长度参数无效"。
使用以下修改后的查询,该查询将适用于任何SQL Server版本: -
Dog d = std::string("rover");
答案 1 :(得分:0)
CASE
应该给你一些启发。
SELECT TOP 20
total_worker_time / execution_count AS Avg_CPU_Time,
Execution_count,
total_elapsed_time / execution_count AS AVG_Run_Time,
total_elapsed_time,
(SELECT
SUBSTRING(text, statement_start_offset / 2 + 1,
( (CASE WHEN statement_end_offset = -1
THEN (LEN(CONVERT(nvarchar(max),text)) * 2)
ELSE statement_end_offset END) - statement_start_offset) / 2+1)
FROM sys.dm_exec_sql_text(sql_handle) )
AS Query_Text
FROM sys.dm_exec_query_stats
ORDER BY Avg_CPU_Time DESC
答案 2 :(得分:-1)
正如我在commet中提到的,order by子句不起作用。请尝试APPLY
函数sys.dm_exec_sql_text
:
SELECT TOP 20
s.total_worker_time / execution_count AS Avg_CPU_Time,
s.execution_count,
s.total_elapsed_time / s.execution_count AS AVG_Run_Time,
s.total_elapsed_time,
SUBSTRING(t.text, s.statement_start_offset / 2 + 1, s.statement_end_offset)
FROM sys.dm_exec_query_stats s
OUTER APPLY sys.dm_exec_sql_text(sql_handle) t
ORDER BY 1 DESC
请向我们提供一些错误文字,也许SUBSTRING
函数中有错误...