如果不小心執行了需要很長時間處理的 SQL 語法,可以透過以下的語法查詢進度或終止。
查詢 DDL/DML 進度的語法
(DDL:Data Definition Language,資料定義語言;DML:Data Manipulation Language,資料操作語言)
SELECT 
    r.session_id,
    r.command,
    r.status,
    r.percent_complete,
    r.start_time,
    r.total_elapsed_time/1000 AS elapsed_seconds,
    r.estimated_completion_time/1000 AS est_seconds_left,
    t.text AS sql_text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
session_id→ ID。command→ 執行的 SQL 指令類型。status→ 執行狀態。sql_text→ 正在執行的 SQL,可以確認你的 SQL 語法。
以下都只是估算值,僅能協助判斷是否要中止。
percent_complete→ 目前完成百分比(0~100)。estimated_completion_time→ 剩餘時間(毫秒)。total_elapsed_time→ 已經執行時間(毫秒)。
中止執行中的 DDL/DML
-- 假設要終止 session_id = 75
KILL 75;
要注意以下事項:
KILL不是「馬上結束」,它會觸發 rollback。- Rollback 時間大致 ≈ 該交易已經跑的時間,例如 
ALTER TABLE已經跑 2 小時,rollback 也可能要 1~2 小時。 - 若原本資料表已經被鎖定,在 rollback 過程中,該資料表仍然會被鎖定。
 
