View Full Version : توقف sp اجرا شده توسط کاربر
khorsandreza
یک شنبه 07 شهریور 1395, 19:12 عصر
سلام دوستان میدانم سوالم تکراری هست یا نه
من یک SP دارم که مقدار زیادی رکورد را از اکسس به اس کیوال سرور انتقال میده حال بعضی مواقع پیش می اید کاربر بخاطر طولانی بودن زمان اجرا انصراف بدهد حال با چه دستوری توسط T-Sql چروسیجر را متوجه کنم که عملیات را متوقف کند و فرمان rolbak اجرا نماید
En_MK
دوشنبه 08 شهریور 1395, 09:04 صبح
این کوئری رو پشت دکمه انصراف کال کنید
وبه جای Sp_Name اسم SP که میخواید کنسل بشه رو بذارید
declare @nuke_spid int
select @nuke_spid = session_id
from sys.dm_exec_requests r
outer apply sys.fn_get_sql(r.sql_handle) s
where s.text like '%Sp_Name%'
exec ('kill ' + @nuke_spid)
khorsandreza
دوشنبه 08 شهریور 1395, 13:27 عصر
این کوئری رو پشت دکمه انصراف کال کنید
وبه جای Sp_Name اسم SP که میخواید کنسل بشه رو بذارید
declare @nuke_spid int
select @nuke_spid = session_id
from sys.dm_exec_requests r
outer apply sys.fn_get_sql(r.sql_handle) s
where s.text like '%Sp_Name%'
exec ('kill ' + @nuke_spid)
سلام ممنون که زحمت کشید پاسخ ارائه دادید ولی با اجرای دستور خطای زیر اتفاق می افته
عدد 58 شماره ID پروسیجر می باشد
58
Msg 6104, Level 16, State 1, Line 1
Cannot use KILL to kill your own process.
En_MK
سه شنبه 09 شهریور 1395, 09:26 صبح
خواهش میکنم...من نمیتونم تست کنم که درست هست یا ن اما سرچ که کردم به این نتیجه رسیدم
Tools > Options > Query Execution > SQL Server > Advanced
http://social.msdn.microsoft.com/Forums/getfile/96573
khorsandreza
سه شنبه 09 شهریور 1395, 10:58 صبح
سلام باز هم تشکر از دوست عزیزمان En_MK که زحمت کشیدند من هم در نت جستجود کردم پروسیجری زیر ا دیدم تقریبا کار من را جواب داد ولی بنظر من کار حرفه ای نیست دارای اشکلاتی هست اینجا قرار میدم تا دوستان بیشتر تجزیه و تحلیل کنند
CREATE PROCEDURE [dbo].[sp_KillSpidsByDBName]
@dbname sysname = ''
AS
BEGIN
-- check the input database name
IF DATALENGTH(@dbname) = 0 OR LOWER(@dbname) = 'master' OR LOWER(@dbname) = 'msdb'
RETURN
DECLARE @sql VARCHAR(30)
DECLARE @rowCtr INT
DECLARE @killStmts TABLE (stmt VARCHAR(30))
-- find all the SPIDs for the requested db, and create KILL statements
-- for each of them in the @killStmts table variable
INSERT INTO @killStmts SELECT 'KILL ' + CONVERT (VARCHAR(25), spid)
FROM master..sysprocesses pr
INNER JOIN master..sysdatabases db
ON pr.dbid = db.dbid
WHERE db.name = @dbname
-- iterate through all the rows in @killStmts, executing each statement
SELECT @rowCtr = COUNT(1) FROM @killStmts
WHILE (@rowCtr > 0)
BEGIN
SELECT TOP(1) @sql = stmt FROM @killStmts
EXEC (@sql)
DELETE @killStmts WHERE stmt = @sql
SELECT @rowCtr = COUNT(1) FROM @killStmts
END
END
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.