Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 inserted and deleted создаются всегда или только если есть триггер  [new]
chukcha_trigger
Guest
простите пожалуйста неграмотность полнейшую,
но не нахожу никак ответ в гугле: таблицы inserted and deleted создаются всегда или только если есть триггер?
1 дек 11, 15:24    [11690170]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
chukcha_trigger
простите пожалуйста неграмотность полнейшую,
но не нахожу никак ответ в гугле: таблицы inserted and deleted создаются всегда или только если есть триггер?
Только внутри триггера или в OUTPUT таких команд как DELETE, INSERT, UPDATE (SQL >=9.0), MERGE (SQL >=10.0)
1 дек 11, 15:27    [11690204]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
А если в триггере на update, например, не задействована таблица deleted или обе таблицы?
1 дек 11, 15:43    [11690351]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
chukcha_trigger
Guest
спасибо, а не подскажете, как можно обойти создание этих таблиц,
вернее, сама проблема такая: надо запретить update таблицы.
пишу триггер
create trigger [test_update_no]
   on  dbo.test_table
   instead of update
as   
         raiserror ('Update not allowed on this table', 16, 1)
и он отрабатывает 6:55 минут на 1689645 строках.
т.е. все время тратит на заполнение таблиц, которые по сути не нужны
1 дек 11, 15:50    [11690437]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
Ну вообще например в 2000 это даже совсем не таблицы, а "вьюхи" на данные в логе и совсем не создаются...
Но вопрос-то в чем? Естественно, сервер делает некие оптимизации, связанные с не/повторным/использованием таблиц в зависимости от версии.

А проблема-то в чем?
1 дек 11, 15:51    [11690443]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
chukcha_trigger
надо запретить update таблицы
посмотрите в сторону deny update
1 дек 11, 16:03    [11690546]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
Vicont_rtf
Member

Откуда:
Сообщений: 64
create trigger [test_update_no]
on dbo.test_table of update
as
begin
raiserror ('Update not allowed on this table', 16, 1)
rollback transaction
end
1 дек 11, 17:00    [11691052]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Vicont_rtf,

зачем ROLLBACK? В триггере ничего не происходит.
1 дек 11, 17:03    [11691083]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
chukcha_trigger
и он отрабатывает 6:55 минут на 1689645 строках.

А откуда вы взяли время выполнения только триггера ?
1 дек 11, 17:08    [11691130]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
chukcha_trigger
Guest
Glory,
нет, это такое время выполнения апдейта.
запускаю апдейт всей таблицы с таким числом строк,
ожидаю, что триггер сработает моментально,
вместо этого проходят почти 7 минут, потом он пишет мое сообщение об ошибке
и потом еще сколько строк отработал (все).
при этом, разумеется, не обновляет ничего.
вопрос, что он делал 7 минут.
ну, я думаю, что заполнял deleted.
просто на что еще-то подумать.
отсюда вопрос и возник...
2 дек 11, 00:33    [11693180]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
А вы думаете, что апдейт сразу начинает что то апдетить ?
Что не нужно сначала скажем найти в таблице записи ?
Кроме того, выше уже сказали, что таблицы inserted deleted есть отражение журнала лога
2 дек 11, 00:39    [11693187]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
chukcha_trigger
Guest
не совсем поняла вопрос.
это намек на то, что все это время он закачивает данные в память?
я честно не знаю порядок выполнения instead of,
обязятельно ли ВСЕГДА для него заполнение этих inserted и deleted.
хотелось, чтоб ничего не заполнялось и чтоб данные не читались,
хотя бы в случае как у меня,
ведь update как раз не нужен.
2 дек 11, 00:46    [11693198]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
chukcha_trigger
Guest
ну, вернее, заполнение лога.
оно обязательно, даже если известно,
что никакого апдейта не будет?
я же не after пишу, а instead of.
вроде логично ожидать, что раз вместо, то не обязятельно буду обновлять
2 дек 11, 00:49    [11693201]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
chukcha_trigger
не совсем поняла вопрос.
это намек на то, что все это время он закачивает данные в память?

В таблице 1000000 записей
Вы апдейтите 10000 записей
Как вы думаете, сколько времени нужно, чтобы найти те записи, которые будут изменены ?
2 дек 11, 00:49    [11693203]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
chukcha_trigger
Guest
не, ну если наперед известно, что не будет апдейта,
то зачем строки искать вообще?
я про это спрашиваю.
никак нельзя подсказать серверу, раз сам не видит, что ничего не надо искать?
2 дек 11, 00:54    [11693212]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
Glory
Member

Откуда:
Сообщений: 104751
chukcha_trigger
не, ну если наперед известно, что не будет апдейта,

Откуда это может быть известно ?
Вы пишете в условии апдейта выражение, которое можно вычислить на этапе компиляции запроса ?
where 1=0 ?
Как можно заранее узнать, сколько записей затронет запрос where f1 > 100 ?
2 дек 11, 01:01    [11693223]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
chukcha_trigger
Guest
ну, например, больше в тексте триггера нету слова update :)
вообще все, сдаюсь.
т.е. все то время это и есть время на считывание всей таблицы и заполнение журнала всеми значениями, так?
2 дек 11, 01:13    [11693237]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
chukcha_trigger
Guest
Vicont_rtf
create trigger [test_update_no]
on dbo.test_table of update
as
begin
raiserror ('Update not allowed on this table', 16, 1)
rollback transaction
end


не поняла, зачем выкинули instead.
а еще заодно откатится внешняя транзакция, если была.
например,
create table #t (id int)
insert into #t
select 1 union all select 2

begin tran
update #t 
   set id = id * 10
update dbo.test_table
   set id = id * 10
commit   

получим
select * from #t   
id
---
1
2
2 дек 11, 01:18    [11693241]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
chukcha_trigger
вообще все, сдаюсь.


зачем что-то изобретать, когда можно просто запретить операцию UPDATE, о чем уже писалось выше
2 дек 11, 06:43    [11693383]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
chukcha_trigger
ну, например, больше в тексте триггера нету слова update :)
Это же не значит, что серверу не нужно обрабатывать все изменённые данные. Вы знаете, что вам данные не нужны, но сервер не может это знать - может, вы в триггере будете отсылать письма по каждой записи - слова update нету, а данные обрабатываются.
Агализ текста триггера на то, что данные не понадобятся - это в общем случае очень сложная задача, и невостребованная - вряд ли кто-то, кроме вас, делает триггер и не обрабатывает данные в нём :-)
2 дек 11, 08:51    [11693574]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
chukcha_trigger
Guest
Knyazev Alexey,
я ничего не изобретаю на пустом месте, начальник считает,
что товарищи с правами могут случайно изменить то, чего менять нельзя.
и хочет такую вот защиту типа от случайности.
а права у тех, кто имеет доступ, дай бог каждому,
т.е. и триггер дропнуть им ничего не стоит при желании.
но считается, что они сознательно не будут гадить.
и как с таким начальством бороться?
2 дек 11, 09:26    [11693668]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
chukcha_trigger
я ничего не изобретаю на пустом месте, начальник считает,
что товарищи с правами могут случайно изменить то, чего менять нельзя.
и хочет такую вот защиту типа от случайности.
а права у тех, кто имеет доступ, дай бог каждому,
т.е. и триггер дропнуть им ничего не стоит при желании.
но считается, что они сознательно не будут гадить.
и как с таким начальством бороться?
1. Самому внедрить нормальную систему прав.
2. Настучать более высокому начальству о начальнике-разгильдяе. В письменной форме типа "за существующий бардак ответственности не несу."
3. Уволиться.

На выбор или все сразу.

Ну представьте: в банке управляющий категорически откажется использовать замки "из принципа". И поручит вам обеспечить сохранность материальных ценностей без изменения существующего порядка вещей. И будете думать, как приклеивать купюры скотчем к столу, чтобы случайно кто-то не унес.
2 дек 11, 10:12    [11693911]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
chukcha_trigger
Knyazev Alexey,
я ничего не изобретаю на пустом месте, начальник считает,
что товарищи с правами могут случайно изменить то, чего менять нельзя.
и хочет такую вот защиту типа от случайности.
а права у тех, кто имеет доступ, дай бог каждому,
т.е. и триггер дропнуть им ничего не стоит при желании.
но считается, что они сознательно не будут гадить.
и как с таким начальством бороться?


а что вас тогда пугает "длинная транзакция"!?....раз это больше защита от дурака, то и пусть себе работает долго (редкий же случай ;) )...все равно не проапдейтят, триггер же есть
2 дек 11, 10:35    [11694057]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
toly_m
Member

Откуда:
Сообщений: 89
Как сказали, проще всего отобрать права на обновление именно этой таблицы. А то дали права и тут же запрещаете "на словах".
А если таблица еще и не заполняется, т.е. используется только для чтения, то можно вообще перевести в другую базу, которую перевести в режим только чтения, а в текущей базе сделать на эту таблицу одноименную вьюшку.
2 дек 11, 10:42    [11694101]     Ответить | Цитировать Сообщить модератору
 Re: inserted and deleted создаются всегда или только если есть триггер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
Knyazev Alexey
а что вас тогда пугает "длинная транзакция"!?....раз это больше защита от дурака, то и пусть себе работает долго (редкий же случай ;) )...все равно не проапдейтят, триггер же есть
+1

Тоже с самого начала не понимал, в чём вопрос.
2 дек 11, 12:08    [11695025]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить