Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2015, 16:38   #11
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Если меня тригер так
Код:
alter TRIGGER  T1_from_T2
ON T1 FOR UPDATE
AS
 if not exists (select dat from T2) 
 begin
 insert into T2 (dat, price )
  select dat, price 
  from T1
  where price >0
 end
и делаю update
Код:
update T1 set price=30 where id = 1
select * from T2
То вставляеть да ... и на повтореном выполнение это update , нечено не меняетсия. Но, если я пишу уже второй update
Код:
update T1 set price=35 where id = 2
select * from T2
То это тригер уже не делаеть insert на T2 . как его реализовать что работал нормально ?
xxbesoxx вне форума Ответить с цитированием
Старый 21.03.2015, 16:54   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вы уперлись и не желаете доки глянуть. from T1 where price >0 выберет все записи из T1 удовлетворяющие условию. А надо только обновленные. Разница есть же. Для этого и придумали логические триггерные таблицы Inserted и Deleted
Цитата:
как его реализовать что работал нормально
С вашим подходом ни как. Доки по триггерам внимательно проштудировать

https://msdn.microsoft.com/ru-ru/lib...v=sql.90).aspx
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 21.03.2015 в 17:03.
Аватар вне форума Ответить с цитированием
Старый 21.03.2015, 17:08   #13
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
А надо только обновленные. Разница есть же. Для этого и придумали логические триггерные таблицы
Перечитал несколько пример, голова уже зависаеть = не работаеть ;-) посмотрю и напишу что будет

Цитата:
from T1 where price >0 выберет все записи из T1 удовлетворяющие условию. А надо только обновленные. Разница есть же. Для этого и придумали логические триггерные таблицы Inserted и Deleted
Именил так тоже самое
Код:
alter TRIGGER  T1_from_T2
ON T1 FOR UPDATE
AS
 if not exists (select price from T2) -- тоже самое если  (select dat from T2)
 begin
  insert into T2 (dat, price )
  select dat, price 
from inserted
end
если T2 пустой и делаю update первый раз
Код:
update T1 set price=35 where id =2
select * from T2
то работает
А если второе раз
Код:
update T1 set price=40 where id =1
select * from T2
данны обновляетсия, но не добавляетсия T2, Аватар пожалуйста покажите как он должен работал нормально ?

Последний раз редактировалось Stilet; 21.03.2015 в 20:34.
xxbesoxx вне форума Ответить с цитированием
Старый 21.03.2015, 20:01   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Примерно так, только ни хрена не понял, что такое T2, что там должно быть и чего не должно. Скорее всего T2 вообще не нужна, коль триггером такие обновления делаются, всю информацию можно собрать с Т1, возможно добавив туда еще поле или два
Код:
INSERT INTO T2 (dat, price)
  SELECT I.dat,I.price
    FROM Inserted I
    WHERE I.price>0 AND NOT EXISTS(SELECT 0 FROM T2 WHERE T2.dat=I.dat and T2.price=I.price)
Повторяю - примерно, ТЗ не понятное
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.03.2015, 20:19   #15
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

ОЙ ДРУГ, ВЫ ГЕНИОС , ТАЛАНТ ! Огромное ВАМ спасибо - ДУЖЕ ДЯКУЮ все работаеть как я хотел
Код:
alter TRIGGER  T1_from_T2
ON T1 FOR UPDATE
AS
begin
  INSERT INTO T2 (dat, price)
  SELECT I.dat,I.price
  FROM Inserted I
  WHERE I.price>0 AND NOT EXISTS(SELECT 0 FROM T2 WHERE T2.dat=I.dat and T2.price=I.price)
end
Цитата:
только ни хрена не понял, что такое T2
Это длиное тема, просто я делал для примера ( T1 и T2 ) что мне било интересно и не мог сделать самому ... А реально это логика мне нужно применят проекте.... ДАЙ ВАМ БОГ ЗДОРОВЬЯ , ДУЖЕ -ДУЖЕ ДЯКУЮ

Последний раз редактировалось xxbesoxx; 21.03.2015 в 22:06.
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Триггер на Update xxbesoxx SQL, базы данных 5 07.07.2014 05:02
триггер в SQL Apoka5555 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 5 18.10.2013 00:33
Sql. Триггер VAVILON17 Помощь студентам 4 10.01.2013 00:21
Триггер для БД на SQL Sayks Помощь студентам 1 20.04.2012 14:04