powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужен совет
12 сообщений из 12, страница 1 из 1
Нужен совет
    #32017443
Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таблицу Т1 некая программа вставляет записи (повлиять на ее действие я не могу).
Триггером для вставки эти данные по нужным мне условиям вносятся в таблицу Т2.
Я не хочу хранить данные в Т1 и в конце работы триггера пишу такую строку:
DELETE FROM T1
Все работает, но может быть есть способ лучше?
...
Рейтинг: 0 / 0
Нужен совет
    #32017463
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, на Т1 повесить INSTEAD OF trigger?
...
Рейтинг: 0 / 0
Нужен совет
    #32017505
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сначала откатить транзакцию, потом сделать вставку в T2 из inserted, примерно так:
CREATE TRIGGER [TI_T1] ON [T1]
FOR INSERT
AS
ROLLBACK
INSERT INTO T2
SELECT * FROM inserted
...
Рейтинг: 0 / 0
Нужен совет
    #32017515
MishGan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2.Владимир Смирнов
А я всегда думал, что если в триггере сделать ROLLBACK, то содержимое таблиц inserted и deleted чистится.
ИМХО, если MSSQL 2000 то ISTEAD OF триггер самое то.
...
Рейтинг: 0 / 0
Нужен совет
    #32017529
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MishGan, то что мы думаем о действительности не всегда соответствует действительности.
...
Рейтинг: 0 / 0
Нужен совет
    #32017588
MishGan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Смирнов, дык, я вроде проверил даже - действительно чистится.
...
Рейтинг: 0 / 0
Нужен совет
    #32017713
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггер запускается в неявной транзакции. Если сказать Rollback в любом месте этой транзакции, транзакция откатится ВСЯ.

Вариант, предложенный alexeyvg, IMHO самый грамотный. Не изобретайте велосипед.
...
Рейтинг: 0 / 0
Нужен совет
    #32017770
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garya. Если сказать Rollback в любом месте триггера, транзакция откатится НЕ ВСЯ, а ДО НАЧАЛА.
Триггер будет продолжать работу до завершения, и всё, что он сделает после Rollback, сохранится.
Другой вопрос, будет или не будет после Rollback в триггере существовать inserted?
MishGan утверждает, что по результатам его проверки - нет, не будет (или, как он выражается, чистится).
Согласно моим проверкам - inserted существовать будет, и триггер нормально отрабатывает.
А вот INSTEAD OF trigger не реализован, у меня SQL 7.0.
Отсюда вывод: самый правильный вариант у Сергея, так как его работа не зависит от версии сервера, а другие - зависимые.
...
Рейтинг: 0 / 0
Нужен совет
    #32017787
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Владимир Смирнов

Попробуйте у себя выполнить этот скрипт

create table a(i int)
create table b(i int)
go
create trigger aaa on a for insert as
select count(*) 'before' from inserted
rollback tran
select count(*) 'after' from inserted
go
insert a select 111

У меня(SQL2000) он выдаёт такое:
before
-----------
1

(1 row(s) affected)

after
-----------
0

Неужели в 7-м будет по-другому?
...
Рейтинг: 0 / 0
Нужен совет
    #32017791
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у меня вот такое:
before
-----------
1

(1 row(s) affected)

after
-----------
1
...
Рейтинг: 0 / 0
Нужен совет
    #32017796
Странно. У меня результат разный получился. На 2000 табличка inserted чистится, а на 7.0. не чистится.
...
Рейтинг: 0 / 0
Нужен совет
    #32017809
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, Microsoft подходит по принципу: поменьше вопросов освещать в документации, а раз в документации на этот счёт ничего не написано, то может быть реализовано как угодно. As Is, так и используйте. Ещё один аргумент, чтобы воздерживаться (и мне в первую очередь) от использования конструкций, которые явно не описаны в BOL. Даже если они и работают, ... сейчас.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужен совет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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