查找有问题的查询

时间:2016-06-07 02:10:15

标签: sql sql-server sql-server-2012

以下查询在SQL Server 2008中运行,但在SQL Server 2012中无效。为什么?

nogil

3 个答案:

答案 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函数中有错误...