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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2015, 13:14   #1
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию T-SQL Триггер на Update Tab1

Здравствуйте ребята . СУБД MS SQL есть 2 таблица который не зависеть друг другу
1)
Код:
create table T1
(
 id int identity(1,1) primary key,
 dat datetime not null,
 price money
);
2) до пустим на это таблицу есть такой данных
Код:
insert into T1(dat, price) values (getdate(), ''),
                                  (getdate(), ''),
                                  (getdate(), ''),
                                  (getdate(), '')
                                  
 select * from T1
3) Есть еще аналогический таблица
Код:
 create table T2
(
 id int identity(1,1) primary key,
 dat datetime not null,
 price money
);
5) Я хочу написать такой триггер : Если таблице T1 price >0 тогда это запись переставил на таблицу T2 Для этого начинаю
Код:
CREATE TRIGGER  T1_from_T2
ON T1 FOR UPDATE
AS
BEGIN TRAN
  insert into T2 (dat, price )
  select dat, price 
  from T1
  where price >0
COMMIT TRAN
А сейчас если делаю апдеит T1 на price
Код:
update T1 set price=15 where id = 1
select * from T2
работаеть да, строк добавляетсия из T1 на T2 но, если этот обдейт выполнять еще раз то еще добавляетсия T2
Вопрос: Как переделать это триггер так , что если такой запись существует таблицу T2 что не было повтор, не мыполнил оператор INSERT
xxbesoxx вне форума Ответить с цитированием
Старый 21.03.2015, 13:21   #2
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

что то не понимаю вопроса.. тупо проверить никак?
lomastr_ вне форума Ответить с цитированием
Старый 21.03.2015, 13:28   #3
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
что то не понимаю вопроса.. тупо проверить никак?
Да я хочу добавить эту триггеру

Код:
BEGIN TRAN
 если T2 существует такой запись таким датам и таким цена что не выполнял INSERT
  insert into T2 (dat, price )
  select dat, price 
  from T1
  where price >0
COMMIT TRAN
xxbesoxx вне форума Ответить с цитированием
Старый 21.03.2015, 13:32   #4
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

ну так почему хотите и не делаете?
lomastr_ вне форума Ответить с цитированием
Старый 21.03.2015, 13:34   #5
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
ну так почему хотите и не делаете?
Потаму ..... какая разница ? Я пишу вопрос на форуме и вы меня говорите печаму, страно так то

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

1. Транзакцию запускать в триггере зачем? Она уже есть если что
2. Логические таблицы deleted и inserted для обновляемых записей основной таблицы нужно использовать
3. При групповой операции триггер отрабатывает один раз для всей группы записей, а не для каждой в отдельности
4. В основной таблице записи могут не только обновляться, но и добавляться и удаляться. Как вторая таблица на это реагировать должна?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.03.2015, 13:47   #7
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
4. В основной таблице записи могут не только обновляться, но и добавляться и удаляться. Как вторая таблица на это реагировать должна?
Друг спасибо за внимание основной таблице T1 читаем что данных не удаляетсия , там просто всегда попадаеть и price=0 Мне надо когда эту T1 price>0 или is not null выполнялос это операция
Код:
  insert into T2 (dat, price )
  select dat, price 
  from T1
  where price >0
Но, если таблицу T2 есть уже такой запись , таким dat и price что не сработало это insert
xxbesoxx вне форума Ответить с цитированием
Старый 21.03.2015, 14:01   #8
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

вы взялись писать триггер и не умеете проверку сделать? тогда начните с азов тскл
lomastr_ вне форума Ответить с цитированием
Старый 21.03.2015, 14:04   #9
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
вы взялись писать триггер и не умеете проверку сделать? тогда начните с азов тскл
Пожалуйста идите гуляйте на улице хороши погода... Не флудите на моего тему
xxbesoxx вне форума Ответить с цитированием
Старый 21.03.2015, 14:08   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

xxbesoxx, вы не обратили внимания на первых три пункта, без них ни как. Да и по поводу 4-го не понятно. Триггера кавалерийской атакой не пишутся. Проверка на существование Exists
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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