Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Имя ХП в триггере  [new]
Initio
Member

Откуда:
Сообщений: 23
Добрый день, господа и, быть может, дамы!
Заранее прошу прощения, если данная тема поднималась ранее, но поиск не дал ответа на мой вопрос.
Суть вопроса в следующем: есть некая таблица и некое поле в ней. Данное поле может изменяться несколькими процедурами или вообще руками. Возможно ли как-то передать в триггер, навешанный на эту таблицу, имя процедуры, изменяющей данное поле? И если да, то каким образом?
Была попытка object_name(@@PROCID), но он возвращает собственно триггер (что впрочем логично).
5 июн 13, 11:49    [14393337]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
Initio
Возможно ли как-то передать в триггер, навешанный на эту таблицу, имя процедуры, изменяющей данное поле? И если да, то каким образом?

SET CONTEXT_INFO
5 июн 13, 11:51    [14393344]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Initio
Member

Откуда:
Сообщений: 23
Glory, я правильно понимаю, что придется править каждую процедуру, которая может изменять данные в искомой таблице?
5 июн 13, 11:53    [14393371]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
Initio
я правильно понимаю, что придется править каждую процедуру, которая может изменять данные в искомой таблице?

Да
5 июн 13, 11:54    [14393374]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Initio
Member

Откуда:
Сообщений: 23
Glory
Initio
я правильно понимаю, что придется править каждую процедуру, которая может изменять данные в искомой таблице?

Да


Понятно, спасибо. Нашел вроде похожий вопрос и попытался сделать как описано тут, но все равно в итоге передается NULL.
5 июн 13, 11:55    [14393384]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Initio
Member

Откуда:
Сообщений: 23
А все вижу там Ваш ответ :)
5 июн 13, 12:00    [14393428]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
invm
Member

Откуда: Москва
Сообщений: 9687
Initio,

create procedure dbo.Proc1
as
begin
 ...
 create table #Proc1_dummy (i int);
 ...
 update dbo.TableWithTrigger...
 ...
end;
go

create trigger Trigger1
on dbo.TableWithTrigger
for update
begin
 ...
 if object_id('tempdb..#Proc1_dummy', 'U') is not null
  begin
   ...
  end;
 ...
end;
go
5 июн 13, 12:13    [14393574]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
Initio
Понятно, спасибо. Нашел вроде похожий вопрос и попытался сделать как описано тут, но все равно в итоге передается NULL.

Там вообще то обсуждается указатель на текущий выполняемый запрос
5 июн 13, 12:14    [14393584]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Initio
поле может изменяться несколькими процедурами или вообще руками. Возможно ли как-то передать в триггер, навешанный на эту таблицу, имя процедуры, изменяющей данное поле?

А можете пояснить, почему логика работы вашего триггера должна зависеть от вызывающей процедуры?
5 июн 13, 12:23    [14393679]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Initio
Member

Откуда:
Сообщений: 23
Glory
Initio
Понятно, спасибо. Нашел вроде похожий вопрос и попытался сделать как описано тут, но все равно в итоге передается NULL.

Там вообще то обсуждается указатель на текущий выполняемый запрос


Я думал это мне поможет, вижу что ошибался.
5 июн 13, 12:36    [14393763]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Initio
Member

Откуда:
Сообщений: 23
invm,

Спасибо, вариант с модификацией процедур уже предложили :-)
5 июн 13, 12:37    [14393770]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Initio
Member

Откуда:
Сообщений: 23
Гость333
Initio
поле может изменяться несколькими процедурами или вообще руками. Возможно ли как-то передать в триггер, навешанный на эту таблицу, имя процедуры, изменяющей данное поле?

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


Логика никак не зависит. Вы наверняка будете смеяться, но изначальной целью ставилось нахождение "виновного" в беспорядочных изменениях поля.
5 июн 13, 12:38    [14393782]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31823
Initio
Гость333
пропущено...

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


Логика никак не зависит. Вы наверняка будете смеяться, но изначальной целью ставилось нахождение "виновного" в беспорядочных изменениях поля.
Если это массовое явление, то достаточно в триггере записать SPID, и одновременно следить профайлером.
5 июн 13, 15:33    [14395283]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
Initio
Вы наверняка будете смеяться, но изначальной целью ставилось нахождение "виновного" в беспорядочных изменениях поля.

"виновный" - это именно процедура или запутивший ее пользователь ?
5 июн 13, 15:38    [14395313]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Initio
Member

Откуда:
Сообщений: 23
alexeyvg
Initio
пропущено...


Логика никак не зависит. Вы наверняка будете смеяться, но изначальной целью ставилось нахождение "виновного" в беспорядочных изменениях поля.
Если это массовое явление, то достаточно в триггере записать SPID, и одновременно следить профайлером.


Так и поступил.. Проблема в том, что многие работают удаленно а основная часть процедур запускается ночью.. Будем по времени выполнения вычислять.
6 июн 13, 06:55    [14397657]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Initio
Member

Откуда:
Сообщений: 23
Glory
Initio
Вы наверняка будете смеяться, но изначальной целью ставилось нахождение "виновного" в беспорядочных изменениях поля.

"виновный" - это именно процедура или запутивший ее пользователь ?


Это мы и хотим выяснить :-)
6 июн 13, 06:56    [14397659]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
Initio
Это мы и хотим выяснить :-)

Что "это" ?
Имя процедуры, в тексте которой есть update таблицы/поля ?
Или имя логина/пользователя, запустившего update таблицы/поля ?
6 июн 13, 10:15    [14398203]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Initio
Member

Откуда:
Сообщений: 23
Glory
Initio
Это мы и хотим выяснить :-)

Что "это" ?
Имя процедуры, в тексте которой есть update таблицы/поля ?
Или имя логина/пользователя, запустившего update таблицы/поля ?


Если процедура, то ее имя. Если это сделал пользователь вручную - тогда имя пользователя.
7 июн 13, 06:14    [14403423]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3378
Initio
Glory
пропущено...

Что "это" ?
Имя процедуры, в тексте которой есть update таблицы/поля ?
Или имя логина/пользователя, запустившего update таблицы/поля ?


Если процедура, то ее имя. Если это сделал пользователь вручную - тогда имя пользователя.
Т.е. имя пользователя, запустившего процедуру, вас не интересует.
7 июн 13, 08:40    [14403619]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
Initio
Member

Откуда:
Сообщений: 23
Ennor Tiegael
Initio
пропущено...


Если процедура, то ее имя. Если это сделал пользователь вручную - тогда имя пользователя.
Т.е. имя пользователя, запустившего процедуру, вас не интересует.


Имя пользователя можно выяснить по CURRENT_USER и SYSTEM_USER, если я не ошибаюсь
10 июн 13, 06:37    [14412788]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
может попробовать с помощью extended events?
10 июн 13, 09:10    [14412995]     Ответить | Цитировать Сообщить модератору
 Re: Имя ХП в триггере  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1822
Ennor Tiegael
Initio
пропущено...
Если процедура, то ее имя. Если это сделал пользователь вручную - тогда имя пользователя.
Т.е. имя пользователя, запустившего процедуру, вас не интересует.


Я так понимаю что изменять данные может Job и не один.
Если например делает это он, то узнать процедуру, т.к. куча Job`ов может запускаться от одного имени.
Ну или если пользователь, то что именно он запускает, чтобы собственно пофиксить процедуру.
11 июн 13, 19:06    [14422410]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить