2009-07-07 40 views
6

Hãy nói rằng bạn có thực hiện như sau (chạy dài) quá trình từ mã của bạn:Làm thế nào bạn có thể hủy một SQL quá trình thực hiện chủ lập trình

int processID = DB.Execute(SQL); //some long running sql statement 

Có cách nào để programatically gọi SQL Server để hủy bỏ quá trình nếu nó mất quá nhiều thời gian (giống như nhấn nút "Stop" trong QueryAnalyzer)?

//cancel the process if it is taking too long 
DB.Execute("sp_CancelProcess @ProcessID=" + processID); 
+1

Hãy chú ý hơn đến các lựa chọn thẻ của bạn - thẻ là cách bạn kết nối câu hỏi của mình với đối tượng thích hợp. –

Trả lời

4

Kill @Spid

lưu ý rằng đây là một nỗ lực cuối cùng. bạn chỉ cần đóng kết nối trên máy khách để hủy quá trình.

+0

Chỉ cần lưu ý rằng bạn không thể giết spid của riêng bạn, bạn cần phải tạo một kết nối và sau đó giết các spid từ – SQLMenace

5

sử dụng KILL với quá trình id:

KILL 53; 

Chỉ cần lưu ý rằng bạn không thể giết spid của riêng bạn, bạn cần phải tạo kết nối khác và sau đó giết spid từ

nếu bạn cố gắng giết SPID riêng của bạn, bạn sẽ nhận được lỗi sau

Server: Msg 6104, Level 16, State 1, Line 1 
Cannot use KILL to kill your own process. 
0

bạn phải chạy truy vấn của bạn không đồng bộ, như sau:

SqlConnection _anotherConnection; 
    SqlCommand _anotherCommand; 
    IAsyncResult _anotherCommandStarted; 
    _anotherCommand = _anotherConnection.CreateCommand(); 
    _anotherCommand.CommandText = string.Format("SET DEADLOCK_PRIORITY HIGH; BEGIN TRANSACTION; {0};", hookCommand); 
    _anotherCommand.CommandType = CommandType.Text; 
    _anotherCommand.ExecuteNonQuery(); 
    _anotherCommand.CommandText = "UPDATE Data.Hook1 SET i=1-i"; 
    _anotherCommandStarted = _anotherCommand.BeginExecuteNonQuery(); 

Để hủy lệnh, chạy này:

_anotherCommand.EndExecuteNonQuery(_anotherCommandStarted); 
+1

Đề xuất BeginExecuteNonQuery() là tốt, nhưng EndExecuteNonQuery không hủy lệnh - nó chặn cho đến khi lệnh hoàn thành . – Mike

0
sp_who2 

Danh sách quá trình hiển thị

Find you SPID 

Kill SPID 

Nếu thông báo lỗi bạn không thể giết chết quá trình của riêng bạn

Xem quá trình rund trong studio quản lý của bạn và ngăn chặn nó.

Hoặc đóng kết nối hiện tại và mở lại và cố gắng giết ngay bây giờ.

Các vấn đề liên quan