解决方案 »

  1.   

    比如说 (SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 , 
          ( (CASE WHEN statement_end_offset = -1 
             THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2) 
             ELSE statement_end_offset END)  - statement_start_offset) / 2+1))  AS sql_statement,这里的.text,statement_start_offset含义以及为何除以2 还有这个AS是什么意思 总之都不明白
      

  2.   

    dm_exec_query_stats
    微软解释
    dm_exec_sql_text
    微软解释借用小F大大的,解释下整段意思
    statement_start_offest 和statement_end_offset的值需要除以2来补偿SQL Server使用Unicode来存储这种数据的。statement_end_offse值为-1指出语句先前到了批的最后。而substring()函数不识别-1,并将其作为非法值。使用(<statement_end_offset> -<statement_start_offset>)/2,代替-1,一个需要输入64000的值,来确认语句覆盖了所有的情况。通过这种方法,长时间运行或资源消费语句可以被过滤出大型的存储过程或批。AS 这个直接理解“当作”的意思
      

  3.   

    --我的粗浅解释,希望能帮到你,下面的语句确实不好理解
    SELECT    s2.dbid, 
        s1.sql_handle,  
        (SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 , 
          ( 
            (CASE WHEN statement_end_offset = -1 
                       THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2) --将convert()函数s2.text的数据类型转化为nvarchar,len()求取字符串的长度
             ELSE statement_end_offset END)  - statement_start_offset) / 2+1))  AS
        sql_statement,   
    --substring(expression1,int_exp1,int_exp2) 取字符串函数
    --case when...then...else... end  判断statement_end_offset的起始位置
    execution_count, 
        plan_generation_num, 
        last_execution_time,   
        total_worker_time, 
        last_worker_time, 
        min_worker_time, 
        max_worker_time,
        total_physical_reads, 
        last_physical_reads, 
        min_physical_reads,  
        max_physical_reads,  
        total_logical_writes, 
        last_logical_writes, 
        min_logical_writes, 
        max_logical_writes  
    FROM sys.dm_exec_query_stats AS s1  --sys.dm_exec_query_stats这是一个动态管理视图
    CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2  --sys.dm_exec_sql_text()这是一个动态管理函数,带了参数sql_handle(操作语句句柄)
    --CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行
    WHERE s2.objectid is null --过滤查询结果的条件
    ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;  --根据第一字段,第二字段,第三字段排序