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
')' 付近の構文が正しくありません。

ブロックされたクエリ エージェントの下で、このリンクにあるものを実行しようとしています。

任意のポインタをいただければ幸いです。

4

2 に答える 2

2

with 句の後に何かが必要です (通常、その;前に a )

   ;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 に答える