View Full Version : توقف sp اجرا شده توسط کاربر
  
khorsandreza
یک شنبه 07 شهریور 1395, 20:12 عصر
سلام دوستان میدانم سوالم تکراری هست یا نه 
من یک SP دارم که مقدار زیادی رکورد را از اکسس به اس کیوال سرور انتقال میده حال بعضی مواقع پیش می اید کاربر بخاطر طولانی بودن زمان اجرا انصراف بدهد حال با چه دستوری توسط T-Sql چروسیجر را متوجه کنم که عملیات را متوقف کند و فرمان rolbak اجرا نماید
En_MK
دوشنبه 08 شهریور 1395, 10: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, 14: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, 10:26 صبح
خواهش میکنم...من نمیتونم تست کنم که درست هست یا ن اما سرچ که کردم به این نتیجه رسیدم
Tools > Options > Query Execution > SQL Server > Advanced
 http://social.msdn.microsoft.com/Forums/getfile/96573
khorsandreza
سه شنبه 09 شهریور 1395, 11: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.