Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Initio Member Откуда: Сообщений: 23 |
Добрый день, господа и, быть может, дамы! Заранее прошу прощения, если данная тема поднималась ранее, но поиск не дал ответа на мой вопрос. Суть вопроса в следующем: есть некая таблица и некое поле в ней. Данное поле может изменяться несколькими процедурами или вообще руками. Возможно ли как-то передать в триггер, навешанный на эту таблицу, имя процедуры, изменяющей данное поле? И если да, то каким образом? Была попытка object_name(@@PROCID), но он возвращает собственно триггер (что впрочем логично). |
5 июн 13, 11:49 [14393337] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
SET CONTEXT_INFO |
||
5 июн 13, 11:51 [14393344] Ответить | Цитировать Сообщить модератору |
Initio Member Откуда: Сообщений: 23 |
Glory, я правильно понимаю, что придется править каждую процедуру, которая может изменять данные в искомой таблице? |
5 июн 13, 11:53 [14393371] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Да |
||
5 июн 13, 11:54 [14393374] Ответить | Цитировать Сообщить модератору |
Initio Member Откуда: Сообщений: 23 |
Понятно, спасибо. Нашел вроде похожий вопрос и попытался сделать как описано тут, но все равно в итоге передается NULL. |
||||
5 июн 13, 11:55 [14393384] Ответить | Цитировать Сообщить модератору |
Initio Member Откуда: Сообщений: 23 |
А все вижу там Ваш ответ :) |
5 июн 13, 12:00 [14393428] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Там вообще то обсуждается указатель на текущий выполняемый запрос |
||
5 июн 13, 12:14 [14393584] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
А можете пояснить, почему логика работы вашего триггера должна зависеть от вызывающей процедуры? |
||
5 июн 13, 12:23 [14393679] Ответить | Цитировать Сообщить модератору |
Initio Member Откуда: Сообщений: 23 |
Я думал это мне поможет, вижу что ошибался. |
||||
5 июн 13, 12:36 [14393763] Ответить | Цитировать Сообщить модератору |
Initio Member Откуда: Сообщений: 23 |
invm, Спасибо, вариант с модификацией процедур уже предложили :-) |
5 июн 13, 12:37 [14393770] Ответить | Цитировать Сообщить модератору |
Initio Member Откуда: Сообщений: 23 |
Логика никак не зависит. Вы наверняка будете смеяться, но изначальной целью ставилось нахождение "виновного" в беспорядочных изменениях поля. |
||||
5 июн 13, 12:38 [14393782] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31823 |
|
||||
5 июн 13, 15:33 [14395283] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
"виновный" - это именно процедура или запутивший ее пользователь ? |
||
5 июн 13, 15:38 [14395313] Ответить | Цитировать Сообщить модератору |
Initio Member Откуда: Сообщений: 23 |
Так и поступил.. Проблема в том, что многие работают удаленно а основная часть процедур запускается ночью.. Будем по времени выполнения вычислять. |
||||
6 июн 13, 06:55 [14397657] Ответить | Цитировать Сообщить модератору |
Initio Member Откуда: Сообщений: 23 |
Это мы и хотим выяснить :-) |
||||
6 июн 13, 06:56 [14397659] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Что "это" ? Имя процедуры, в тексте которой есть update таблицы/поля ? Или имя логина/пользователя, запустившего update таблицы/поля ? |
||
6 июн 13, 10:15 [14398203] Ответить | Цитировать Сообщить модератору |
Initio Member Откуда: Сообщений: 23 |
Если процедура, то ее имя. Если это сделал пользователь вручную - тогда имя пользователя. |
||||
7 июн 13, 06:14 [14403423] Ответить | Цитировать Сообщить модератору |
Ennor Tiegael Member Откуда: Сообщений: 3378 |
|
||||
7 июн 13, 08:40 [14403619] Ответить | Цитировать Сообщить модератору |
Initio Member Откуда: Сообщений: 23 |
Имя пользователя можно выяснить по CURRENT_USER и SYSTEM_USER, если я не ошибаюсь |
||||
10 июн 13, 06:37 [14412788] Ответить | Цитировать Сообщить модератору |
andrey odegov Member Откуда: Сообщений: 473 |
может попробовать с помощью extended events? |
10 июн 13, 09:10 [14412995] Ответить | Цитировать Сообщить модератору |
X-Cite Member Откуда: Минск Сообщений: 1822 |
Я так понимаю что изменять данные может Job и не один. Если например делает это он, то узнать процедуру, т.к. куча Job`ов может запускаться от одного имени. Ну или если пользователь, то что именно он запускает, чтобы собственно пофиксить процедуру. |
||||
11 июн 13, 19:06 [14422410] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |