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

Откуда: Moscow
Сообщений: 1837
Evgen_pust,

sp_help 'PRACIVNYK'


сюда результат
27 май 16, 16:48    [19229109]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
CREATE TRIGGER Stazh
    ON dbo.PRACIVNYK
    AFTER UPDATE
AS BEGIN

    SET NOCOUNT ON;

    IF UPDATE(Dosvid_rob) BEGIN

        UPDATE 
        SET Stazh =
            CASE WHEN s.Dosvid_rob < 3 THEN 0.6
                    WHEN s.Dosvid_rob BETWEEN 3 AND 6 THEN 0.8
                    WHEN s.Dosvid_rob BETWEEN 7 AND 10 THEN 1
                    --ELSE t.Stazh
            END
        FROM dbo.PRACIVNYK t
        JOIN INSERTED s ON t.Dosvid_rob = s.Stazh

    END

END
GO
27 май 16, 16:48    [19229110]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Evgen_pust
...
t.Dosvid_rob = s.Stazh

хитро
27 май 16, 16:49    [19229116]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
Осталось это

Msg 156, Level 15, State 1, Procedure Stazh, Line 17
Incorrect syntax near the keyword 'SET'.
27 май 16, 16:49    [19229118]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1837
JOIN INSERTED s ON t.Dosvid_rob = s.Stazh


+
*рукалицо*
27 май 16, 16:50    [19229120]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
ТС, вы уж сделайте по варианту с вычисляемым столбцом, там всё за вас уже сделали , осталось только данные в табличку набить
27 май 16, 16:51    [19229123]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Evgen_pust
Осталось это

Msg 156, Level 15, State 1, Procedure Stazh, Line 17
Incorrect syntax near the keyword 'SET'.

ну там алиас или имячко какое впишите
27 май 16, 16:53    [19229131]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
felix_ff, "рукалицо" не должно быть спрятано под спойлером
27 май 16, 16:54    [19229139]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
Ну так в чем проблема, обьясните! Что такое алиас?
27 май 16, 16:56    [19229148]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Evgen_pust
Ну так в чем проблема, обьясните! Что такое алиас?

это уже не так весело
CREATE TRIGGER Stazh
    ON dbo.PRACIVNYK
    AFTER UPDATE
AS BEGIN

    SET NOCOUNT ON;

    IF UPDATE(Dosvid_rob) BEGIN

        UPDATE t
        SET Stazh =
            CASE WHEN s.Dosvid_rob < 3 THEN 0.6
                    WHEN s.Dosvid_rob BETWEEN 3 AND 6 THEN 0.8
                    WHEN s.Dosvid_rob BETWEEN 7 AND 10 THEN 1
                    --ELSE t.Stazh
            END
        FROM dbo.PRACIVNYK t
        JOIN INSERTED s ON t.Dosvid_rob = s.Stazh

    END

END
GO
27 май 16, 16:57    [19229154]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
TaPaK
t.Dosvid_rob = s.Stazh
[/src]

ну и предикат не в дугу
27 май 16, 16:58    [19229157]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Выполните команду sp_help чтобы мы увидели какие там у Вас столбцы в таблице. Как правило первый столбец это PK по которому и надо делать JOIN.
27 май 16, 17:00    [19229164]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
можно даже
t.Dosvid_rob = s.Dosvid_rob
чё мелочится, даже работать будет
27 май 16, 17:00    [19229167]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
AlanDenton
Выполните команду sp_help чтобы мы увидели какие там у Вас столбцы в таблице. Как правило первый столбец это PK по которому и надо делать JOIN.


ха-ха. сейчас ТС будет гуглить что за РогаКопыта (PK)
27 май 16, 17:02    [19229175]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Konst_One, конечно посмеялся. Но если честно такая тенденция пугает. Более того такие приколы я от мидлов часто встречаю :(
27 май 16, 17:07    [19229188]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
AlanDenton
Konst_One, конечно посмеялся. Но если честно такая тенденция пугает. Более того такие приколы я от мидлов часто встречаю :(

так после колледжа (на следующей неделе судя по всему) вы думаете в джуны пойдёт?
27 май 16, 17:09    [19229195]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
TaPaK
так после колледжа (на следующей неделе судя по всему) вы думаете в джуны пойдёт?

Да я не Evgen_pust критикую, а в общем... :(
27 май 16, 17:13    [19229213]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
xenix
Guest
Прямо "танец с саблями"
27 май 16, 22:02    [19230017]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
nokaman
Member

Откуда:
Сообщений: 12
Кто нибудь может помочь, у меня вточности такая же задача, только таблица называется abonement и при обновлении kolvo_zanjatij должна обновляться skidka. Пробовал переделать но не понимаю код:
+
CREATE TRIGGER kolvo
ON abonement
AFTER UPDATE
AS BEGIN

SET NOCOUNT ON;

IF UPDATE(skidka) BEGIN

UPDATE a
SET
kolvo_zanjatij =
CASE WHEN skidka = 10 THEN 10
WHEN skidka = 25 THEN 25
WHEN skidka = 50 THEN 50
ELSE 0.00
END
FROM abonement a
JOIN INSERTED s ON a.unikalnyj_nomer = s.unikalnyj_nomer
WHERE a.skidka = s.skidka

END

END
GO

Щас ругается на строку 13,14,15 неоднозначное имя скидка.
2 июн 16, 20:46    [19251989]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
nokaman
Member

Откуда:
Сообщений: 12
nokaman
FROM abonement a
JOIN INSERTED s ON a.unikalnyj_nomer = s.unikalnyj_nomer
WHERE a.skidka = s.skidka

Не понимаю этот момент
2 июн 16, 20:52    [19252002]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1837
nokaman,

глаза сломать можно. используйте тэг
 для предоставления кода

[src]
CREATE TRIGGER kolvo
ON abonement
AFTER UPDATE
AS BEGIN

SET NOCOUNT ON;

IF UPDATE(skidka) BEGIN

UPDATE a
SET
kolvo_zanjatij =
CASE WHEN skidka = 10 THEN 10
WHEN skidka = 25 THEN 25
WHEN skidka = 50 THEN 50
ELSE 0.00
END
FROM abonement a
JOIN INSERTED s ON a.unikalnyj_nomer = s.unikalnyj_nomer
WHERE a.skidka = s.skidka

END

END
GO


что тут не понятного? вы апдейтите таблицу abonement

update a
означает что будет изменена таблица которой присвоен алиас "a" в данном случае это abonement:
from abonement a


далее что бы понять какие записи в таблице надо изменить надо соединить ее с виртуальной таблицей inserted которая является на момент update копией таблицы abonement и содержит в себе измененные значения

вы связываете ее по предикату
ON a.unikalnyj_nomer = s.unikalnyj_nomer

соответственно колонки a.unikalnyj_nomer и s.unikalnyj_nomer должны совпасть.

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

CREATE TRIGGER kolvo
ON abonement
AFTER UPDATE
AS BEGIN

SET NOCOUNT ON;

IF UPDATE(skidka) BEGIN

select * from abonement
select * from inserted
select * from deleted
/*
UPDATE a
SET
kolvo_zanjatij =
CASE WHEN skidka = 10 THEN 10
WHEN skidka = 25 THEN 25
WHEN skidka = 50 THEN 50
ELSE 0.00
END
FROM abonement a
JOIN INSERTED s ON a.unikalnyj_nomer = s.unikalnyj_nomer
WHERE a.skidka = s.skidka
*/
END

END
GO
2 июн 16, 21:57    [19252233]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1837
ну и еще одно условие связывания у вас вынесено в WHERE
2 июн 16, 21:58    [19252236]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
nokaman
Member

Откуда:
Сообщений: 12
CASE WHEN skidka = 10 THEN 10
WHEN skidka = 25 THEN 25
WHEN skidka = 50 THEN 50

Вываливается ошибка, неоднозначное имя столбца skidka :(
3 июн 16, 13:37    [19254732]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
есть 2 таблицы, в которых это поле

abonement a
INSERTED s
3 июн 16, 13:42    [19254764]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
nokaman
Member

Откуда:
Сообщений: 12
Триггер прошел, но он не срабатывает, может я что то не так делаю. Выбираю таблицу, тыкаю изменить первые 200 строк, начинаю прописывать все поля в том числе kolvo_zanjatij но скидка не проставляется, или как он должен срабатывать?
3 июн 16, 17:07    [19256041]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить