0
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]
)

在 SQL Server 2008 上运行此程序时,我收到以下错误。

消息 102,级别 15,状态 1,第 31 行
')' 附近的语法不正确。

我正在尝试 在 Blocked Queries Agent 下运行此链接中的那个。

任何指针将不胜感激。

4

2 回答 2

2

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

   ;with blockedqueries as
   (
       ....
   )
   Select * from blockedqueries
于 2012-10-04T11:18:47.583 回答
1

通过选择从Common Table Expression(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];
于 2012-10-04T11:23:12.103 回答