Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Удаление с помощью UPDATE ???  [new]
BPK
Member

Откуда: ни: возьмись.
Сообщений: 1601
Выдержка из BOL - про триггеры
During the execution of a DELETE or UPDATE statement, rows are deleted from the trigger table and transferred to the deleted table.

Каким образом записи могут быть удалены при помощи команды UPDATE ?
29 июн 11, 20:44    [10895860]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
Легко. Из триггера.
29 июн 11, 21:08    [10895917]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Есть неточности в формулировках и в BOL (ее тоже люди пишут).

автор
Каким образом записи могут быть удалены при помощи команды UPDATE ?


Физика процесса интересует? Легко: Покритикуйте Оракл 10г
29 июн 11, 21:10    [10895925]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
BPK
Member

Откуда: ни: возьмись.
Сообщений: 1601
Makar4ik
Легко. Из триггера.

Что-то не могу придумать - как.
29 июн 11, 21:11    [10895932]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
BPK
Member

Откуда: ни: возьмись.
Сообщений: 1601
pkarklin
Физика процесса интересует?

Не очень.
29 июн 11, 21:15    [10895943]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
BPK,

CREATE TRIGGER T1 ON Tab1 AFTER UPDATE
AS BEGIN
  Delete TOP(10) from tab1 
END
29 июн 11, 21:16    [10895947]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
BPK
Не очень.


Тогда сконцентрируйтесь на формулировке вопроса.
29 июн 11, 21:20    [10895954]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
BPK
Member

Откуда: ни: возьмись.
Сообщений: 1601
Makar4ik
BPK,

CREATE TRIGGER T1 ON Tab1 AFTER UPDATE
AS BEGIN
  Delete TOP(10) from tab1 
END

и в самом деле.
29 июн 11, 21:21    [10895955]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
BPK
и в самом деле.


Только не имеет никакого отношения к процитированному из BOL.
29 июн 11, 21:25    [10895967]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
pkarklin,

Ну, в данном случае, в BOL вероятно пытались объяснить механизм работы триггера, с его inserted и deleted "temporary, memory-resident tables"
29 июн 11, 21:29    [10895974]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Makar4ik
BPK,

CREATE TRIGGER T1 ON Tab1 AFTER UPDATE
AS BEGIN
  Delete TOP(10) from tab1 
END
Зачем AFTER UPDATE-то?
INSTEAD OF UPDATE
29 июн 11, 21:34    [10895988]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
iap
Зачем AFTER UPDATE-то?
INSTEAD OF UPDATE

А разницы - никакой.
Я ответил на вопрос, "Каким образом записи могут быть удалены при помощи команды UPDATE ?"

Но цитата, приведенная из BOL, действительно к вопросу никакого отношения не имела :)
29 июн 11, 21:37    [10895995]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
BPK
Member

Откуда: ни: возьмись.
Сообщений: 1601
Makar4ik
Но цитата, приведенная из BOL, действительно к вопросу никакого отношения не имела :)

Совсем запутали.
29 июн 11, 21:42    [10896004]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
А если принять во внимание цитату, то вот примерно так:

CREATE TRIGGER T1 ON Tab1 AFTER UPDATE
AS BEGIN
  insert into logtable(ID, Oldvalue, newvalue) select inserted.id, deleted.val1, inserted.val1 
  from inserted,deleted 
  where inserted.ID=deleted.id
  -- Типа, пишем изменения в логи  
END

и в данном контексте - rows are deleted - это та самая табличка в мозгах, которая deleted.
Сиречь - значения строк из Tab1 - до операции update...

Операцию update действительно в данном контексте можно описать как удаление старой строки, и вставку вместо неё новой.
Вот так update и "удаляет" строки.
29 июн 11, 21:43    [10896007]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
BPK
Совсем запутали.

Здесь Вам могут привести несколько вариантов "удаления с помощью UPDATE".

ЗЫ. Смысл поста так и остался непонятным...
29 июн 11, 21:44    [10896009]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Makar4ik
А разницы - никакой.
Да? Интересно.
В первом случае происходит UPDATE, а потом DELETE.
Во втором - UPDATE не выполняется, а заменяется на DELETE, что и требовалось.
29 июн 11, 21:44    [10896012]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Makar4ik,

Полагаю, что ни цитата из BOL, ни вопрос ТС не касается сравнения Inplace Update vs Deffered Update. ;)
29 июн 11, 21:46    [10896017]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
pkarklin
ЗЫ. Смысл поста так и остался непонятным...

Мне кажется, я догадался, об чем был вопрос.

pkarklin
Полагаю, что ни цитата из BOL, ни вопрос ТС не касается сравнения Inplace Update vs Deffered Update.


Ух... Опыт, сын ошибок трудных... MSSQL7 уже вспоминаем...
А даже и в данном контексте нам абсолютно не интересно, перестраивается ли при апдейте clustered index.
В любом случае, MSSQL для триггера создаст в мозгах виртуальные inserted и deleted таблички.
С точки зрения юзверя, и Inplace Update, и Deffered Update выглядели бы тут абсолютно идентичными.
29 июн 11, 21:57    [10896042]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
BPK
Member

Откуда: ни: возьмись.
Сообщений: 1601
pkarklin
ЗЫ. Смысл поста так и остался непонятным...

Смысл поста: "я привык, что при удалении что-то есть в таблице deleted, при вставке и обновлении - в таблице inserted, а вот это... что ещё за хрень?! может быть я упустил какую-то интересную особенность в SQL Server?". Мысль была примерно такой.
29 июн 11, 22:12    [10896065]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
BPK
pkarklin
ЗЫ. Смысл поста так и остался непонятным...

Смысл поста: "я привык, что при удалении что-то есть в таблице deleted, при вставке и обновлении - в таблице inserted, а вот это... что ещё за хрень?! может быть я упустил какую-то интересную особенность в SQL Server?". Мысль была примерно такой.

при удалении что-то в таблице deleted
при вставке что-то в таблице inserted
а вот при изменении - что-то и в таблице deleted, и в таблице inserted.
старое и новое, соответственно.
29 июн 11, 22:15    [10896073]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
BPK,

Вы ничего не упустили. Неточности, повторюсь, есть и в BOL. На счет

автор
что при ... что-то есть в таблице ...


Вы не совсем правы... ;)
29 июн 11, 22:16    [10896077]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
кстати...
а вот у меня вдогонку такой вот вопрос...
Кто знает, как это выловить?

create table tab1(ID int not null PRIMARY KEY, val1 int not null)
insert into tab1(ID, val1) select 1, 1 union all 2,2 union all 3,3 union all 4,4
go

CREATE TRIGGER T1 ON Tab1 AFTER UPDATE
AS BEGIN
  insert into logtable(ID, Oldvalue, newvalue) select inserted.id, deleted.val1, inserted.val1 
  from inserted,deleted 
  where inserted.ID=deleted.id
  -- Типа, пишем изменения в логи  
END
go

-- а теперь... Вот незадача... Мы меняем PK.
update tab1 set ID = ID+1000 where ID > 2


И как мне теперь в триггере связать соответствие записей из inserted и deleted?????
(я не знаю, может, кто в курсе?)
29 июн 11, 22:21    [10896084]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
pkarklin
BPK,

Вы ничего не упустили. Неточности, повторюсь, есть и в BOL. На счет

автор
что при ... что-то есть в таблице ...


Вы не совсем правы... ;)

правы, правы...
Если в результате операции удалилось, обновилось или вставилось 0 строк, то триггер НЕ вызовется.
Так что в триггере, в таблице (inserted, deleted) ВСЕГДА что-то есть.
29 июн 11, 22:23    [10896090]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Makar4ik
Вот незадача... Мы меняем PK.


В MS SQL пока эта задача не решаема...
29 июн 11, 22:23    [10896091]     Ответить | Цитировать Сообщить модератору
 Re: Удаление с помощью UPDATE ???  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Makar4ik
Если в результате операции удалилось, обновилось или вставилось 0 строк, то триггер НЕ вызовется.


Тссссс.... Вызывается... ;)
29 июн 11, 22:31    [10896111]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить