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

Откуда: г. Одесса
Сообщений: 348
Доброго дня всем!


Суть проблемы:

В базе есть табл., в ней поле КОЛ. Есть порядка 60 ХП и Функций, которые могут изменить Это поле. Вроде все работает правильно,
НО иногда в это поле попадает какое-то большое, неверное значение. Смотрел ХП - не увидел ошибки.
Есть мысль сделать триггер на поле и записывать при каждом изменении Старое значение, новое и Имя ХП или Функции, которая это изменение произвела.

Вопрос:
Каким способом определить ИМЯ ХП или функции, вызвавшей срабатывание триггера?

Спасибо, если кто в курсе и подскажет.
4 сен 14, 12:25    [16534165]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10232
Блог
@@PROCID
4 сен 14, 12:27    [16534179]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
ДАВИД,

триггер на поле сделать нельзя.
Только на INSERT или на DELETE или на UPDATE или на любую их комбинацию.

Knyazev Alexey,

@@PROCID - это object_id самогО триггера, а не процедуры, из которой сделали UPDATE.
4 сен 14, 12:33    [16534237]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
msLex
Member

Откуда:
Сообщений: 8730
Knyazev Alexey
@@PROCID

внутри триггера @@procid = object_id триггера






ДАВИД,

никак, триггер не должен по разному работать в зависимости от процедуры вызвавшей изменение таблицы.
4 сен 14, 12:33    [16534238]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
ДАВИД
НО иногда в это поле попадает какое-то большое, неверное значение.

Почему тогда для этого поля нет ограничения ?
4 сен 14, 12:34    [16534253]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
msLex
Member

Откуда:
Сообщений: 8730
ДАВИД
Функций, которые могут изменить Это поле

а вот тут поподробнее, что это за функции, "изменяющие поле"?
4 сен 14, 12:34    [16534256]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10232
Блог
iap
@@PROCID - это object_id самогО триггера, а не процедуры, из которой сделали UPDATE.


кто мешает это значение передавать из процедур...например в теле процедуры менять контекст инфо = этому значению....далее триггер просто из контекс_инфо вытаскивает имя процедуры...

либо логировать в самих процедурах
4 сен 14, 12:36    [16534275]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
Shakill
Member

Откуда: мск
Сообщений: 1882
ДАВИД,
используйте DBCC INPUTBUFFER(@@SPID)
4 сен 14, 12:41    [16534317]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
msLex
Member

Откуда:
Сообщений: 8730
Knyazev Alexey
кто мешает это значение передавать из процедур...например в теле процедуры менять контекст инфо = этому значению....далее триггер просто из контекс_инфо вытаскивает имя процедуры...

это нужно вносить изменения во все процедуры, а именно этого ТС, по всей видимости, не очень хочет.

уж если править процедуры, то сразу по второму варианту
Knyazev Alexey
либо логировать в самих процедурах



в любом случае это не ответ на вопрос
автор
Каким способом определить ИМЯ ХП или функции(), вызвавшей срабатывание триггера?
4 сен 14, 12:41    [16534321]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
ДАВИД
Member

Откуда: г. Одесса
Сообщений: 348
Knyazev Alexey - Спасибо.
Но, извините, ИМЯ ХП по ее ID ?
Напомните функцию, пожалуйста...
4 сен 14, 12:55    [16534411]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
[quote ДАВИД]Но, извините, ИМЯ ХП по ее ID ?[/quote
object_name(@@procID)
4 сен 14, 13:01    [16534468]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
ДАВИД
Member

Откуда: г. Одесса
Сообщений: 348
Knyazev Alexey,

А вот с этого места по-подробнее и если можно с маленьким примерчиком.
Спасибо
4 сен 14, 13:08    [16534520]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
ДАВИД
Member

Откуда: г. Одесса
Сообщений: 348
Knyazev Alexey
iap
@@PROCID - это object_id самогО триггера, а не процедуры, из которой сделали UPDATE.


кто мешает это значение передавать из процедур...например в теле процедуры менять контекст инфо = этому значению....далее триггер просто из контекс_инфо вытаскивает имя процедуры...

либо логировать в самих процедурах


Имеется ввиду ЭТО место
4 сен 14, 13:08    [16534524]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
ДАВИД
Member

Откуда: г. Одесса
Сообщений: 348
И еще...

В принципе я имел ввиду (просто не ясно сформулировал) СТЕК процедур.
А уже из стека брать последнюю, вызвавшую триггер.

И еще , триггер конечно срабатывает всегда одинаково. А вот ХП ( какая из 60-65) в это поле заносит фигню - вот ВОПРОС...
4 сен 14, 13:12    [16534552]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10232
Блог
ДАВИД
Knyazev Alexey
пропущено...


кто мешает это значение передавать из процедур...например в теле процедуры менять контекст инфо = этому значению....далее триггер просто из контекс_инфо вытаскивает имя процедуры...

либо логировать в самих процедурах


Имеется ввиду ЭТО место


CREATE TABLE  Test ( TestID INT )
GO

CREATE TRIGGER TestTrigger ON Test
FOR INSERT
AS

SELECT CAST(CONTEXT_INFO() AS NVARCHAR(128));
GO

CREATE PROCEDURE usp_ProcIDTest
AS

DECLARE @ProcedureName VARBINARY(MAX) = CAST(OBJECT_NAME(@@PROCID) AS VARBINARY(MAX))
SET CONTEXT_INFO @ProcedureName

INSERT INTO Test ( TestID ) VALUES ( 1 ) 

GO

EXEC usp_ProcIDTest
GO

DROP TABLE Test
GO
4 сен 14, 13:13    [16534557]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
ДАВИД
Имеется ввиду ЭТО место

А вы что собрались переписать все свои 60-65 процедур ?
4 сен 14, 13:19    [16534612]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
Shakill
Member

Откуда: мск
Сообщений: 1882
ДАВИД,
у вас два пути
1. вы в каждую процедуру дописываете код, отвечающий за идентификацию (запись id процедуры в CONTEXT_INFO) и затем в триггере получаете текущее состояние.
2. если процедуры менять нельзя или неохота, то в триггере анализируете результат DBCC INPUTBUFFER() и пытаетесь понять цепочку событий

готовый стек вызова триггера без усилий вы не получите
4 сен 14, 13:27    [16534675]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
aleks2
Guest
ДАВИД
И еще...

В принципе я имел ввиду (просто не ясно сформулировал) СТЕК процедур.
А уже из стека брать последнюю, вызвавшую триггер.

И еще , триггер конечно срабатывает всегда одинаково. А вот ХП ( какая из 60-65) в это поле заносит фигню - вот ВОПРОС...


Страдалец, поставь в таблице или триггере constraint на "фигню" и спокойно жди... когда прибегут и доложат.
4 сен 14, 13:29    [16534701]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
Не факт, что плохое значение вообще пишет процедура.
4 сен 14, 13:30    [16534709]     Ответить | Цитировать Сообщить модератору
 Re: Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы  [new]
ДАВИД
Member

Откуда: г. Одесса
Сообщений: 348
Владислав Колосов
Не факт, что плохое значение вообще пишет процедура.


НЕ факт!!!

Но саму программу (модули) я вроде бы [ :-((( ] проверил...
Хотя...
4 сен 14, 13:37    [16534782]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить