Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проверка запущена ли процедура через sys.sysprocesses / 6 сообщений из 6, страница 1 из 1
10.07.2018, 14:40
    #39672105
assmsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка запущена ли процедура через sys.sysprocesses
Добрый день.
Для моей задачи необходимо проверять запущена ли в данный момент процедура.

Пытаюсь сделать это так:

select 1
from sys.sysprocesses as qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
where object_name(st.objectid) = 'Моя_процедура'

Когда тестировал данный способ все работало прекрасно. Те запускал тестовую процедуру и скрипт выдавал значение = 1.
Но когда я запускаю боевую процедуру то вышеуказанный скрипт ее в упор не видит. В чем может быть проблема? Это же не может быть связано со сложностью самой процедуры?
...
Рейтинг: 0 / 0
10.07.2018, 14:49
    #39672115
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка запущена ли процедура через sys.sysprocesses
assmsk,

что такое сложность процедуры? Если процедуры вызывает другую, то в процессах будет другая.
А так подозреваю городите очередной sp_getapplock
...
Рейтинг: 0 / 0
10.07.2018, 15:05
    #39672124
assmsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка запущена ли процедура через sys.sysprocesses
Просто не могу концептуально понять почему когда делаешь это на условной тестовой процедуре:

create procedure test as declare @i int while 1 < 2 begin set @i = 1 end

То все прекрасно работает. А когда запускаешь уже свою процедуру с несложным но километровым кодом, то она не отображается в запущенных процессах но при этом работает.
...
Рейтинг: 0 / 0
10.07.2018, 15:19
    #39672131
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка запущена ли процедура через sys.sysprocesses
assmsk,

если у вас в "километровом коде" вызываются другие модули, то ваш исходный модуль будет скрыт их вызовами.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create proc long_proc2
as 
waitfor delay '00:00:30'
select object_name(@@PROCID) + ' ends';
go


create proc long_proc1
as 
exec long_proc2
waitfor delay '00:00:30'
select object_name(@@PROCID) + ' ends';
go

exec long_proc1



в другой сессии позапускайте и посмотрите как будет меняться выполняемый модуль
Код: sql
1.
2.
3.
4.
select object_name(st.objectid), st.text
from sys.sysprocesses as qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st 
where object_name(st.objectid) is not null
...
Рейтинг: 0 / 0
10.07.2018, 15:24
    #39672133
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка запущена ли процедура через sys.sysprocesses
и еще кстати лучше использовать представление sys.dm_exec_requests вместо sys.sysprocesses если конечно версия не 2000
...
Рейтинг: 0 / 0
10.07.2018, 15:25
    #39672134
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка запущена ли процедура через sys.sysprocesses
assmskПросто не могу концептуально понять почему когда делаешь это на условной тестовой процедуре:

create procedure test as declare @i int while 1 < 2 begin set @i = 1 end

То все прекрасно работает. А когда запускаешь уже свою процедуру с несложным но километровым кодом, то она не отображается в запущенных процессах но при этом работает.
кончептуально: очевидно в несложном но километровым

авторcreate procedure test as declare @i int while 1 < 2 begin EXEC('несложный но километровый') end
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проверка запущена ли процедура через sys.sysprocesses / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]