Возможно ли узнать имя транзакции из триггера

Шафиков Рамиль
Дата: 09.09.2006 16:54:48
Всем добрый вечер.

Допустим мы запустили транзакцию с именем ТРАН_1 и в ходе нее изменяем несколько таблиц, на которых висят триггеры(на обновление, вставку и удаление), можно ли в этих триггерах узнать что они выполняются имено в ходе выполнения транзакции ТРАН_1?

Если нет то возможно ли создание и установка своих переменных состояния типа @@identity(любых глобальных переменных состояние сиквела)?

Просто неохото создавать новую таблицу с единственной колонкой для передачи параметров в триггеры.
Изопропил
Дата: 09.09.2006 17:25:46
Чем не нравится временная таблица для этих целей?
Шафиков Рамиль
Дата: 09.09.2006 17:38:56
Изопропил
Чем не нравится временная таблица для этих целей?


Интересно узнать есть ли другие возможности передачи параметров.

К томуже раз есть возможность задания имени транзакции то почему ею не воспользоваться :)
aleks2
Дата: 09.09.2006 17:45:32
Шафиков Рамиль
Изопропил
Чем не нравится временная таблица для этих целей?


Интересно узнать есть ли другие возможности передачи параметров.

К томуже раз есть возможность задания имени транзакции то почему ею не воспользоваться :)


Ну есть еще SET CONTEXTINFO @variable...
Но если задуматься: а зачем триггерам параметры?
Шафиков Рамиль
Дата: 09.09.2006 17:54:46
aleks2
Шафиков Рамиль
Изопропил
Чем не нравится временная таблица для этих целей?


Интересно узнать есть ли другие возможности передачи параметров.

К томуже раз есть возможность задания имени транзакции то почему ею не воспользоваться :)


Ну есть еще SET CONTEXTINFO @variable...
Но если задуматься: а зачем триггерам параметры?


Ну допустим есть желание последить за изменением данных в таблице - скидывать в другую какие столбцы обновлялись(состояние до и после с названиями столбцов) но не всегда а только когда это необходимо. Сейчас пишу прогу для проведения инвентаризации, соостветственно что-то юзверь будет править ручками(накладные, расходные листы и тп) а мне надо потом посмотреть чего он там делал(т.к. в ее ходе возможно правка уже оформленных документов).
Изопропил
Дата: 09.09.2006 17:59:43
Ну если нужна защтиа от юзверей - запрети им писать в таблицы, все обовления только через хранимые процедуры, заодно от триггеров избавишься, головной боли существенно меньше.
Шафиков Рамиль
Дата: 09.09.2006 18:07:49
Изопропил
Ну если нужна защтиа от юзверей - запрети им писать в таблицы, все обовления только через хранимые процедуры, заодно от триггеров избавишься, головной боли существенно меньше.


Этот юзверь должен иметь права изменения данных в таблицах, иначе как он будет исправлять ошибки накопившиеся в течении месяца.

Просто администратор должен будет(ч/з соответствующие формы) знать какие таблицы изменялись - что-то типа лога проведенной инвентаризации, если менялась накладная то почему, какие товары были удалены из нее какие добавлены, какие параметры(общая сумма, кубатура и тп) были до и после инвентаризации.
Изопропил
Дата: 09.09.2006 18:32:03
Ну и пусть обновляет таблицы. Только через твои ХП, а не напрямую. Интерфейс на чём пишется?
Шафиков Рамиль
Дата: 10.09.2006 10:23:21
Изопропил
Ну и пусть обновляет таблицы. Только через твои ХП, а не напрямую. Интерфейс на чём пишется?


На Delphi , доступ к БД через ADO.

Все таки вопрос остается - зачем давать возможность именовать транзакции если потом нету возможности узнать по данному имени что имено вот эта транзакция обновляет сейчас таблицу.

Просто сейчас на работе параллельно сосуществуют три БД, и три разные проги которые выполняют похожие функции, от одной отказываемся(1С меняем на Галактику, соответственно отказываемся от 1ой из трех БД), третья прога собственная разработка(не я ее делал), есть желание оставить только разработанные интерфейс от нее и прикрутить к БД от Галактики(вести одну БД всяко легче). Соответственно встал вопрос какие таблицы дергаются, какие поля задются при заведении тех или иных накладных, мат.ценностей и тп. В БД Галактики таблиц около 5000 тысяч, накинул на все триггеры, которые и смотрят чего и как изменяется и закидывают это в таблицу ЛОГ. Единстенное хотелось бы что бы эти триггеры работали не всегда а только когда мне это надо, поэтому и встал вопрос - возможно ли задание глобальных параметров @@var или же определения в контексте какой транзакции происходит обновление таблицы.
Изопропил
Дата: 10.09.2006 11:23:06
Если так хочется в триггерах иметь информацию о приложении - установите имя приложения в строке соединения - Application Name=, а в TSQL коде - используйте APP_NAME ( )


P.S. - от хулиганов не спасёт