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

Откуда:
Сообщений: 20
Есть таблица "Работник". В ней два столбика: Процент и Стаж. Как с помощью триггера "IF, THEN, ELSE" сделать так, чтобы при обновлении "стажа", обновлялся "процент". SQL server 2008/
27 май 16, 15:02    [19228375]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

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

это ты прям с экзамена пишешь?
27 май 16, 15:04    [19228393]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
TaPaK, ну можно и так сказать)
Мне курсовой сдавать через час, а я не могу этот триггер сделать
27 май 16, 15:06    [19228408]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Тригера типа "if,then,else" не бывает. Вы чтото попутали
27 май 16, 15:06    [19228415]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

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

и почему это должно стать проблемой форума? пиши что написал - исправим
27 май 16, 15:07    [19228418]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
felix_ff
Member

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

Зато чесно признался.
Резюмируем - надо ходить на лекции тогда таких вопросов возникать не будет.
Или самостоятельно читать документацию
27 май 16, 15:08    [19228428]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
felix_ff,
В общем, нужен триггер, в котором с помощью этих операторов будет реализовано то, что я описал выше
27 май 16, 15:09    [19228436]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
felix_ff
Member

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

Читайте документацию в сторону instead of update тригера
27 май 16, 15:11    [19228446]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
CREATE TRIGGER Stazh
ON dbo.PRACIVNYK
AFTER UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
В данный момент имею следующее:



IF Dosvid_rob <3 ( SELECT Stazh = 0.6)
THEN Stazh = 0.6

END IF

IF Dosvid_rob >3 , 6< ( SELECT Stazh = 0.8)
THEN Stazh = 0.8
ELSE
END IF

IF UPDATE Dosvid_rob = '7,8,9,10' ( SELECT Stazh = 0.8)
Stazh = '1.0'
ELSE
END IF

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

Откуда:
Сообщений: 20
Жалуется на синтаксис
27 май 16, 15:13    [19228453]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
felix_ff
Evgen_pust,

Читайте документацию в сторону instead of update тригера

а AFTER UPDATE пусть не читает :)
27 май 16, 15:13    [19228454]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
felix_ff
Member

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

Оооо у нас тут тяжелый случай с "придумыванием" собственного синтаксиса. Вам в основы sql
27 май 16, 15:14    [19228462]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

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

IF Dosvid_rob <3 ( SELECT Stazh = 0.6)
THEN Stazh = 0.6

END IF

коллега(будущий :)) расшифруйте, что это и на каком языке программирования
27 май 16, 15:15    [19228465]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
точнее я бы не против узнать, на каком языке вообще такой синтаксис существует
27 май 16, 15:16    [19228475]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
Я понял, ребят. Спасибо за помощь
27 май 16, 15:16    [19228480]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
iljy
Member

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

1. Триггеры бывают After update либо Instead of update.
2. Изменение полей реализуется оператором UPDATE, никак не if then else
3. В триггере надо сделать примерно следующее

UPDATE t
SET Процент = ...
FROM Таблица t join (inserted i  JOIN deleted d ON условие соединения AND i.стаж != d.стаж) ON условие соединения


felix_ff,

имхо насчет instead of вы сильно погорячились, триггер сильно больше получится.
27 май 16, 15:17    [19228491]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

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

    SET NOCOUNT ON;

    IF UPDATE(Dosvid_rob) BEGIN

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

    END

END
GO 

примерно как-то так... Evgen_pust, можно вопрос... Часом не в ХИРЭ мучаетесь? :)
27 май 16, 15:26    [19228560]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
AlanDenton,
Нет)
Спасибо огромное! Но жалуется еще вот на что


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

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

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

а зачем вы его в процедуру пихаете?
27 май 16, 15:33    [19228613]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Будущий коллега... Троеточие убрали возле ELSE? Выполняете отдельным пакетом?
27 май 16, 15:35    [19228632]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
AlanDenton,
Простите меня, ребята! Я понимаю, что программист из меня никакой, но что уже поделаешь... Закончить колледж-то надо.
27 май 16, 15:39    [19228665]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Evgen_pust, тут все рады помочь. Главное демонстрировать минимальное знание в предметной области. Не ленитесь в общем :) и почитайте на досуге Ицика Бен Гана.

На вопросы так и не ответили...
27 май 16, 15:44    [19228708]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
felix_ff
Member

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

Да ну, на 4 строчки кода что ли сильно больше?


if object_id('dbo.test0', 'U') is not null drop table test0
go

create table test0 (
    prc float,
    age int
)
go

insert into test0 (prc, age) values (1.00, 10), (2.00, 50)
go

if object_id('trg0', 'Tr') is not null drop trigger trg0
go

create trigger trg0 on test0 instead of update 
as
set nocount on
if update(prc)
   update tmp
      set prc = i.prc,
          age = d.age + 1
     from test0 tmp
         join deleted d on d.prc = tmp.prc and d.age = tmp.age
         join inserted i on 1=1
else
    update test0
       set [prc] = inserted.prc,
           [age] = inserted.age
      from inserted
go

select * from test0

update test0
  set prc = 2
where prc = 1

select * from test0

update test0
  set prc = 20
where prc = 2

select * from test0

update test0
set age = 100
where prc = 20

select * from test0

go

drop table test0
27 май 16, 15:45    [19228711]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
упс, лиха дал второй апдейт такой:
    update test0
       set [prc] = i.prc,
           [age] = i.age
      from inserted i
          join deleted d on 1=1
      where d.prc = test0.prc and d.age = test0.age
27 май 16, 15:48    [19228726]     Ответить | Цитировать Сообщить модератору
 Re: HELP!!!!  [new]
Evgen_pust
Member

Откуда:
Сообщений: 20
AlanDenton,
да, троеточие убрал. Выполняю отдельным.
27 май 16, 15:51    [19228745]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить