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


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

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

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

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

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

Knyazev Alexey,

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


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






ДАВИД,

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

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

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

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

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


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

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

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

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

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

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

И еще , триггер конечно срабатывает всегда одинаково. А вот ХП ( какая из 60-65) в это поле заносит фигню - вот ВОПРОС...
...
Рейтинг: 0 / 0
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
    #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
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
    #38737439
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДАВИДИмеется ввиду ЭТО место
А вы что собрались переписать все свои 60-65 процедур ?
...
Рейтинг: 0 / 0
Определить ИМЯ ХП или функции, вызвавшей срабатывание триггера поля таблицы
    #38737460
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДАВИД,
у вас два пути
1. вы в каждую процедуру дописываете код, отвечающий за идентификацию (запись id процедуры в CONTEXT_INFO) и затем в триггере получаете текущее состояние.
2. если процедуры менять нельзя или неохота, то в триггере анализируете результат DBCC INPUTBUFFER() и пытаетесь понять цепочку событий

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

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

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

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

НЕ факт!!!

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


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