SQL语句中出现错误

SQL语句中出现错误,sql,sql-server,Sql,Sql Server,在SQLServer2008上运行时,出现以下错误 Msg 102,15级,状态1,第31行 附近的语法不正确 我正在试着运行一个 在阻止查询代理下 任何提示都将不胜感激。您需要with子句后面的内容,通常是a;在它之前 with [BlockedQueries] as ( select der.session_id, der.blocking_session_id, der.start_time, der.total_elapsed_time,

在SQLServer2008上运行时,出现以下错误

Msg 102,15级,状态1,第31行 附近的语法不正确

我正在试着运行一个 在阻止查询代理下


任何提示都将不胜感激。

您需要with子句后面的内容,通常是a;在它之前

with [BlockedQueries] as 
(
   select 
      der.session_id, der.blocking_session_id, der.start_time, 
      der.total_elapsed_time,
      SUBSTRING(text, (statement_start_offset/2)+1,
      ((CASE statement_end_offset
             WHEN -1 THEN DATALENGTH(text)
             ELSE statement_end_offset
         END - statement_start_offset)/2) + 1) AS sqltext
   from 
      sys.dm_exec_requests as der
   cross apply 
      sys.dm_exec_sql_text (der.sql_handle) as dest
   where 
      blocking_session_id <> 0

   union all

   select 
       c.session_id, c.blocking_session_id, c.start_time, c.total_elapsed_time, 
       dest.text 
   from
       [BlockedQueries] p, sys.dm_exec_requests as c
   cross apply 
       sys.dm_exec_sql_text (c.sql_handle) as dest
   where 
       p.[blocking_session_id] = c.[session_id]
)

在with子句之后需要一些东西,通常是a;在它之前

with [BlockedQueries] as 
(
   select 
      der.session_id, der.blocking_session_id, der.start_time, 
      der.total_elapsed_time,
      SUBSTRING(text, (statement_start_offset/2)+1,
      ((CASE statement_end_offset
             WHEN -1 THEN DATALENGTH(text)
             ELSE statement_end_offset
         END - statement_start_offset)/2) + 1) AS sqltext
   from 
      sys.dm_exec_requests as der
   cross apply 
      sys.dm_exec_sql_text (der.sql_handle) as dest
   where 
      blocking_session_id <> 0

   union all

   select 
       c.session_id, c.blocking_session_id, c.start_time, c.total_elapsed_time, 
       dest.text 
   from
       [BlockedQueries] p, sys.dm_exec_requests as c
   cross apply 
       sys.dm_exec_sql_text (c.sql_handle) as dest
   where 
       p.[blocking_session_id] = c.[session_id]
)

通过从Common Table ExpressionCTE中选择,将查询更改为此查询


通过从Common Table ExpressionCTE中选择,将查询更改为此查询


为什么联合中的第二个select尝试从它所属的CTE返回行?@RowlandShaw-这是递归CTE的语法。这个查询可能会遍历阻塞查询链。还没有仔细研究过。为什么联合体中的第二个select尝试从它所属的CTE返回行?@RowlandShaw-这是递归CTE的语法。这个查询可能会遍历阻塞查询链。我没仔细看过。
with [BlockedQueries] as (

select der.session_id, der.blocking_session_id, der.start_time, der.total_elapsed_time,

SUBSTRING(text, (statement_start_offset/2)+1,

((CASE statement_end_offset

WHEN -1 THEN DATALENGTH(text)

ELSE statement_end_offset

END - statement_start_offset)/2) + 1) AS sqltext

from sys.dm_exec_requests as der

cross apply sys.dm_exec_sql_text (der.sql_handle) as dest

where blocking_session_id <> 0

union all

select c.session_id, c.blocking_session_id, c.start_time, c.total_elapsed_time, dest.text from

[BlockedQueries] p, sys.dm_exec_requests as c

cross apply sys.dm_exec_sql_text (c.sql_handle) as dest

where p.[blocking_session_id] = c.[session_id]

)
SELECT * FROM [BlockedQueries];