Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как триггером менять вставляемое значение? / 7 сообщений из 7, страница 1 из 1
26.11.2001, 10:57
    #32017798
Aleksandr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как триггером менять вставляемое значение?
Уважаемые коллеги!
Возникла необходимость в триггере перехватывать вставляемое значение даты и увеличивать его на час. Я нарисовал такой код:

CREATE TRIGGER AddOneHour ON [dbo].[Payments]
FOR INSERT, UPDATE
AS
IF UPDATE(ReceiveMoneyDate) AND (NOT Inserted.ReceiveMoneyDate IS NULL)
SET Inserted.ReceiveMoneyDate=DATEADD(HOUR,1,Inserted.ReceiveMoneyDate)

Понятно, что изменять таблицу Inserted SQL не хочет. Как сделать триггер правильно?
...
Рейтинг: 0 / 0
26.11.2001, 11:34
    #32017802
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как триггером менять вставляемое значение?
всё в принципе не так
CREATE TRIGGER AddOneHour ON [dbo].[Payments]
FOR INSERT, UPDATE
AS
IF UPDATE(ReceiveMoneyDate)
update Payments set ReceiveMoneyDate=DATEADD(HOUR,1,t.ReceiveMoneyDate)
from Paymentst, Inserted i
where t.KeyFld=i.KeyFld
AND (NOT i.ReceiveMoneyDate IS NULL)

где KeyFld - ваше ключевое поле
...
Рейтинг: 0 / 0
26.11.2001, 11:35
    #32017803
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как триггером менять вставляемое значение?
CREATE TRIGGER AddOneHour ON [dbo].[Payments]
FOR INSERT, UPDATE
AS
IF UPDATE(ReceiveMoneyDate)
update Payments
SET ReceiveMoneyDate = DATEADD(HOUR,1,Payments.ReceiveMoneyDate)
from inserted
where Payments.PKField = inserted.PKField
and Payments.ReceiveMoneyDate IS NOT NULL
...
Рейтинг: 0 / 0
26.11.2001, 12:08
    #32017810
Aleksandr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как триггером менять вставляемое значение?
Спасибо!
...
Рейтинг: 0 / 0
26.11.2001, 18:56
    #32017839
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как триггером менять вставляемое значение?
Для SQL 2000 еще изящнее:
CREATE TRIGGER AffOneHour ON [dbo].[Payments]
instead of insert
as
insert into [dbo].[Payments] (ReceiveMoneyDate)
select DATEADD(HOUR,1,I.ReceiveMoneyDate)
from Inserted I where not I.ReceiveMoneyDate is Null
...
Рейтинг: 0 / 0
27.11.2001, 12:01
    #32017881
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как триггером менять вставляемое значение?
2Garya
Хе-хе, а у Вас ошибочка...
Записи, у которых Inserted.ReceiveMoneyDate is Null вообще не будут вставляться в Payments.
...
Рейтинг: 0 / 0
30.11.2001, 09:03
    #32018196
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как триггером менять вставляемое значение?
Эта "ошибочка" преднамеренная. Я изобразил один из вариантов решения, когда значение увеличиваемого времени вообще не задано. Возможно, автора вопроса возникнут другие варианты решения этой проблемы. Ведь в вопросе не оговорено, как он хочет разрешать такую ситуацию.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как триггером менять вставляемое значение? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]