Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы / 20 сообщений из 20, страница 1 из 1
04.09.2014, 12:25
    #38737332
ДАВИД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
Доброго дня всем!


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

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

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

Спасибо, если кто в курсе и подскажет.
...
Рейтинг: 0 / 0
04.09.2014, 12:27
    #38737337
Knyazev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
Код: sql
1.
@@PROCID
...
Рейтинг: 0 / 0
04.09.2014, 12:33
    #38737349
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
ДАВИД,

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

Knyazev Alexey,

@@PROCID - это object_id самогО триггера, а не процедуры, из которой сделали UPDATE.
...
Рейтинг: 0 / 0
04.09.2014, 12:33
    #38737350
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
Knyazev Alexey
Код: sql
1.
@@PROCID


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






ДАВИД,

никак, триггер не должен по разному работать в зависимости от процедуры вызвавшей изменение таблицы.
...
Рейтинг: 0 / 0
04.09.2014, 12:34
    #38737354
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
ДАВИДНО иногда в это поле попадает какое-то большое, неверное значение.
Почему тогда для этого поля нет ограничения ?
...
Рейтинг: 0 / 0
04.09.2014, 12:34
    #38737356
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
ДАВИДФункций, которые могут изменить Это поле
а вот тут поподробнее, что это за функции, "изменяющие поле"?
...
Рейтинг: 0 / 0
04.09.2014, 12:36
    #38737360
Knyazev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
iap@@PROCID - это object_id самогО триггера, а не процедуры, из которой сделали UPDATE.

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

либо логировать в самих процедурах
...
Рейтинг: 0 / 0
04.09.2014, 12:41
    #38737367
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
ДАВИД,
используйте DBCC INPUTBUFFER(@@SPID)
...
Рейтинг: 0 / 0
04.09.2014, 12:41
    #38737368
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
Knyazev Alexeyкто мешает это значение передавать из процедур...например в теле процедуры менять контекст инфо = этому значению....далее триггер просто из контекс_инфо вытаскивает имя процедуры...

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

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


в любом случае это не ответ на вопрос
авторКаким способом определить ИМЯ ХП или функции(), вызвавшей срабатывание триггера?
...
Рейтинг: 0 / 0
04.09.2014, 12:55
    #38737388
ДАВИД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
Knyazev Alexey - Спасибо.
Но, извините, ИМЯ ХП по ее ID ?
Напомните функцию, пожалуйста...
...
Рейтинг: 0 / 0
04.09.2014, 13:01
    #38737404
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
[quote ДАВИД]Но, извините, ИМЯ ХП по ее ID ?[/quote
object_name(@@procID)
...
Рейтинг: 0 / 0
04.09.2014, 13:08
    #38737417
ДАВИД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
Knyazev Alexey,

А вот с этого места по-подробнее и если можно с маленьким примерчиком.
Спасибо
...
Рейтинг: 0 / 0
04.09.2014, 13:08
    #38737418
ДАВИД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
Knyazev Alexeyiap@@PROCID - это object_id самогО триггера, а не процедуры, из которой сделали UPDATE.

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

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

Имеется ввиду ЭТО место
...
Рейтинг: 0 / 0
04.09.2014, 13:12
    #38737424
ДАВИД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
И еще...

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

И еще , триггер конечно срабатывает всегда одинаково. А вот ХП ( какая из 60-65) в это поле заносит фигню - вот ВОПРОС...
...
Рейтинг: 0 / 0
04.09.2014, 13:13
    #38737426
Knyazev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
ДАВИДKnyazev Alexeyпропущено...


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

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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
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
...
Рейтинг: 0 / 0
04.09.2014, 13:19
    #38737439
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
ДАВИДИмеется ввиду ЭТО место
А вы что собрались переписать все свои 60-65 процедур ?
...
Рейтинг: 0 / 0
04.09.2014, 13:27
    #38737460
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
ДАВИД,
у вас два пути
1. вы в каждую процедуру дописываете код, отвечающий за идентификацию (запись id процедуры в CONTEXT_INFO) и затем в триггере получаете текущее состояние.
2. если процедуры менять нельзя или неохота, то в триггере анализируете результат DBCC INPUTBUFFER() и пытаетесь понять цепочку событий

готовый стек вызова триггера без усилий вы не получите
...
Рейтинг: 0 / 0
04.09.2014, 13:29
    #38737468
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
ДАВИДИ еще...

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

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

Страдалец, поставь в таблице или триггере constraint на "фигню" и спокойно жди... когда прибегут и доложат.
...
Рейтинг: 0 / 0
04.09.2014, 13:30
    #38737470
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
Не факт, что плохое значение вообще пишет процедура.
...
Рейтинг: 0 / 0
04.09.2014, 13:37
    #38737489
ДАВИД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
Владислав КолосовНе факт, что плохое значение вообще пишет процедура.

НЕ факт!!!

Но саму программу (модули) я вроде бы [ :-((( ] проверил...
Хотя...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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