Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите с тригером  [new]
temoxa
Member

Откуда:
Сообщений: 405
Всем привет. Помогите с реализацией тригера. Как можно обновить даные если последняя запись находится в состоянии ноль (Moving) и первая запись которя добляется тоже в состоянии ноль, как можно их объединить, обновляя интервалы и разницу в разрезе vehicle_id? спасибо

К сообщению приложен файл. Размер - 80Kb
22 окт 12, 12:04    [13355564]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
Читатель неместный
Guest
А ты администратор базы?
22 окт 12, 12:41    [13355890]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
trew
Member

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

Может так ?
UPDATE tab01
SET DeltaMinute = t1.DeltaMinute + t2.DeltaMinute,  -- ISNULL()
    DateTill = t2.DateTill
from tab01 t1
    INNER JOIN INSERTED t2
    ON t1.vehicleid =t2.vehicleid AND t1.moving =t2.moving AND t1.DateFrom =t2.DateFrom
   
INSERT INTO tab01 (...)    
SELECT ...
FROM INSERTED t2
WHERE NOT EXISTS (SELECT 1 FROM tab01 t1
    WHERE t1.vehicleid =t2.vehicleid AND t1.moving =t2.moving AND t1.DateFrom =t2.DateFrom)

тестировать только на тестовых данных !
22 окт 12, 12:48    [13355928]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
temoxa
Member

Откуда:
Сообщений: 405
trew,

что-то не то... После вставки значения получил такой вот результат:

К сообщению приложен файл. Размер - 30Kb
22 окт 12, 13:15    [13356154]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
temoxa
Member

Откуда:
Сообщений: 405
помогите пож, кровь из носу...
22 окт 12, 13:55    [13356474]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
temoxa, а в чем проблема?
выбираете последние записи в тапблице и первые записи, которые добавляете
и смотрите "если последняя запись находится в состоянии ноль (Moving) и первая запись которя добляется тоже в состоянии ноль,"
то делаете обновление

тут в принципе и тригер не нужен, а можно обойтись простым MERGE
22 окт 12, 14:02    [13356547]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
temoxa
Member

Откуда:
Сообщений: 405
HandKot,

MERGE test_transport.dbo.transport AS target
    USING (SELECT @Vehicle_id, @Moving, @DateFrom, @DateTill, @DeltaMinute) AS source (Vehicle_id, Moving, DateFrom, DateTill, DeltaMinute)
    ON (target.Vehicle_id = source.Vehicle_id)
    WHEN MATCHED THEN 
        UPDATE SET DateTill = source.DateTill, DeltaMinute = DateDiff(minute, target.DateFrom, source.DateTill)    
	WHEN NOT MATCHED THEN	
	    INSERT (Vehicle_id, Moving, DateFrom, DateTill, DeltaMinute)
	    VALUES (source.Vehicle_id, source.Moving, source.DateFrom, source.DateTill, source.DeltaMinute);
	 ENd


Написал такой Merge... Как можно сделать это:

выбираете последние записи в тапблице и первые записи, которые добавляете 
и смотрите "если последняя запись находится в состоянии ноль (Moving) и первая запись которя добляется тоже в состоянии ноль
22 окт 12, 17:29    [13357989]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
aleks2
Guest
;with
lastrec as
   ( select top(1) * from test_transport.dbo.transport where Vehicle_id = @Vehicle_id order by DateTill DESC )
MERGE lastrec AS target
    USING (SELECT @Vehicle_id, @Moving, @DateFrom, @DateTill) AS source (Vehicle_id, Moving, DateFrom, DateTill)
    ON (target.Vehicle_id = source.Vehicle_id and source.Moving = 0 and target.Moving = 0)
    WHEN MATCHED 
      UPDATE SET 
          DateTill = source.DateTill, DeltaMinute = DateDiff(minute, target.DateFrom, source.DateTill)    
	WHEN NOT MATCHED THEN	
	  INSERT (Vehicle_id, Moving, DateFrom, DateTill, DeltaMinute)
	    VALUES (source.Vehicle_id, source.Moving, source.DateFrom, source.DateTill, source.DeltaMinute);
	 ENd
22 окт 12, 19:04    [13358443]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
temoxa
Member

Откуда:
Сообщений: 405
aleks2,

последняя запись также может находиться в состоянии 1 и первая запись в таблице также может быть ноль..
Поэтому это не подходит...
22 окт 12, 19:17    [13358506]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
aleks2
Guest
Иногда уровень глупости поражает.
22 окт 12, 19:27    [13358551]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
temoxa
Member

Откуда:
Сообщений: 405
aleks2,

почему глупости?
у Вас в скрипте жесткая привязка к нулю...
а также по этому скрипту вставка в таблицу не отработает...
22 окт 12, 19:35    [13358589]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
temoxa,

lastrec as
   ( select top(1) * from test_transport.dbo.transport where Vehicle_id = @Vehicle_id order by DateTill DESC )

выдает последнюю запись? выдает

а про первую вставляемую тут нечего говорить, так как по Вашему скрипту она одна
(SELECT @Vehicle_id, @Moving, @DateFrom, @DateTill) AS source (Vehicle_id, Moving, DateFrom, DateTill)


так что скрипт от aleks2 работоспособный и делает то, что Вы и просили
23 окт 12, 08:23    [13360050]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
temoxa
Member

Откуда:
Сообщений: 405
HandKot,

спасибо за уточнение...
а что делать если вставляется набор даных???
23 окт 12, 11:03    [13360839]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
взять кусок, который выбирает последнюю запись и используя его, немного доработав напильником, получить первую для вставляемого набора данных
23 окт 12, 11:39    [13361141]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
temoxa
Member

Откуда:
Сообщений: 405
HandKot,

скажите а тригером будет быстрее зделать такое добавление\обновление?
И как можно извлечь первую запись из даных, которые вставляються?
23 окт 12, 12:30    [13361599]     Ответить | Цитировать Сообщить модератору
 Re: помогите с тригером  [new]
temoxa
Member

Откуда:
Сообщений: 405
Ребята, помогите с реализацией пож, дедлайн до конца дня...

хотелось бы реализовать триггер, но с ними пока опыта мало было...
функция merge не подходит....

спс.
23 окт 12, 16:58    [13364145]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить