![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Транзакции в триггере
sql © (2008-08-29 11:40:00)
ALTER TRIGGER [trgSettings] ON [dbo].[tSettings]
AFTER INSERT, DELETE, UPDATE
AS
BEGIN
BEGIN TRANSACTION
DECLARE
@IdSetting int,
@Section nvarchar(32),
@Ident nvarchar(32),
@Value nvarchar(32),
@iDate datetime,
@iUser int,
@uDate datetime,
@uUser int,
@Note nvarchar(255),
@Now datetime,
@i int;
SET @Now = GETDATE();
SET NOCOUNT ON;
IF EXISTS(SELECT * FROM Inserted)
BEGIN
IF NOT EXISTS(SELECT * FROM Deleted)
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END;
END
ELSE
BEGIN
COMMIT TRANSACTION
END;
END
В какой части текста триггера лучше всего открывать глобальную, по отношению к триггеру, транзакцию ?
Игорь Шевченко (2008-08-29 15:36:00) [41]MsGuns © (29.08.08 15:22) [43]
Не надо садиться в лужу лишний раз
Курдль (2008-08-29 15:27:00) [42]
> В какой части текста триггера лучше всего открывать глобальную,
> по отношению к триггеру, транзакцию ?
А я вот не поленился почитать Ваш код и ужаснулся - это я так отстал от жизни, или триггер ... BEFORE INSERT... существует только в оракле?
MsGuns (2008-08-29 15:22:00) [43]>DiamondShark © (29.08.08 13:28) [22]
>Нет такой "концепции".
Есть только одна "концепция" - твоя. Остальное - бред сивой кобылы ;)
sql (2008-08-29 15:21:00) [44]
> DiamondShark © (29.08.08 15:11) [41]
Хорошо, если я делаю пакетную вставку, тогда как мне отобразить записи в логе которые я вставил, т.е. лог не обычный клон той таблици в которой триггер, а в общей таблице для логирования событий, думаю примерно понятно о чем речь... Тогда прейдется в триггере делать cursor, чтоб он перелил каждую запись, или нет ?
DiamondShark (2008-08-29 15:11:00) [45]
> sql (29.08.08 14:57) [38]
>
>
> > он о пакетной вставке говорит :-D
>
> Нет, это ты о покетной вставке говоришь. Я о ней просто
> спросил: "Что это ?". Потому что сразу не понял....
А в русском написании это неоднозначный термин.
Его можно понять и как bulk insert, и как insert ... select, и ещё хз как.
Поэтому и спросили, что ты под этим понимаешь. А ты -- хз.
> Ну поидеи Inserted, ...., ....d, по одной записи содержат.
> .., или все же если пакетная вставка, ..., ..., весь пакет
> записей и держат... ?
Все записи, которые затрагивает выполняющийся оператор.
stas (2008-08-29 15:01:00) [46]sql (29.08.08 14:57) [38]
Весь, для этого и таблица, а не переменные в самом триггере.
Триггер выполнится столько раз сколько выполнишь запрос независимо сколько обновилось записей.
sql (2008-08-29 14:58:00) [47]
> Вот, а если пройдет одновременная вставка или апдейт 10
> записей, Inserted будет содержать 10 записей, как ты их
> сохранишь в переменные?
получил ответ на вопрос.
Ну поидеи Inserted, ...., ....d, по одной записи содержат..., или все же если пакетная вставка, ..., ..., весь пакет записей и держат... ?
...
sql (2008-08-29 14:57:00) [48]
> он о пакетной вставке говорит :-D
Нет, это ты о покетной вставке говоришь. Я о ней просто спросил: "Что это ?". Потому что сразу не понял....
ЗЫ:
> stas © (29.08.08 12:30) [18]
> Вверху общие.
>
> Я сразу скажу этот лог (как в примере) работать будет некорректно
> при пакетной вставке, удалении обновлении.
Ну поидеи Inserted, ...., ....d, по одной записи содержат..., или все же если пакетная вставка, ..., ..., весь пакет записей и держат... ?
Ega23 (2008-08-29 14:55:00) [49]
> Особенно про ХП? Знаю такой стиль - применение ХП вместо
> DML.
> Мало того, что это геморрой, но еще и обрубает все пути
> автоматизации генерирования этих DML средами разработки.
понеслось...
Однако - пятница...
stas (2008-08-29 14:53:00) [50]sql (29.08.08 14:47) [32]
Вот, а если пройдет одновременная вставка или апдейт 10 записей, Inserted будет содержать 10 записей, как ты их сохранишь в переменные?
stas (2008-08-29 14:51:00) [51]DiamondShark © (29.08.08 14:37) [29]
Это я писал выше.
sql (29.08.08 14:48) [34]
он о пакетной вставке говорит :-D
sql (2008-08-29 14:48:00) [52]
> Чего ты хз?
хто его знает...
Ты эти волшебные слова где услышал?
Кто его знает...
Курдль (2008-08-29 14:47:00) [53]
> Polevi © (29.08.08 12:02) [4]
> профессионалы стараются избегать триггеров
Это сильно сказано! Также как и слова, что вся целостность данных может быть поддержана "... такими как PK-FK constraints... ХП"
Да. Даже не знаю, что ответить...
Особенно про ХП? Знаю такой стиль - применение ХП вместо DML.
Мало того, что это геморрой, но еще и обрубает все пути автоматизации генерирования этих DML средами разработки.
Вот пример для разминки ума.
Есть рефлексивная связь в сущности Х. (Дерево - в простонародьи).
Отследите-ка логическую ошибку "кольцевой связи" (т.е. если экземпляр сущности А является родительским для В. В - родительским для С. С - родительским для А).
sql (2008-08-29 14:47:00) [54]
> stas © (29.08.08 14:45) [31]
Правильно.
stas (2008-08-29 14:45:00) [55]Я так понимаю в переменные ты хочешь записывать значения из Inserted,Deleted или я неправильно понял?
stas (2008-08-29 14:42:00) [56]sql (29.08.08 13:58) [26]
Insert Into
select from
При этом Select возвращает не 1 запись а много.
DiamondShark (2008-08-29 14:37:00) [57]
> А я хз, потому и спрашиваю...
Жжошь.
Чего ты хз? Ты эти волшебные слова где услышал?
sql (2008-08-29 14:17:00) [58]
> Или что-то другое имелось в виду?
А я хз, потому и спрашиваю...
DiamondShark (2008-08-29 14:16:00) [59]Сорри, а что такое "пакетная вставка"?
Bulk insert, что-ли? Она производится быстро. Триггеры, кстати, при ней могут не срабатывать (зависит от опций).
Или что-то другое имелось в виду?
sql (2008-08-29 13:58:00) [60]Сорри, а как производится пакетная вставка ?