powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как триггером менять вставляемое значение?
7 сообщений из 7, страница 1 из 1
Как триггером менять вставляемое значение?
    #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
Как триггером менять вставляемое значение?
    #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
Как триггером менять вставляемое значение?
    #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
Как триггером менять вставляемое значение?
    #32017810
Aleksandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
Как триггером менять вставляемое значение?
    #32017839
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
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
Как триггером менять вставляемое значение?
    #32017881
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Garya
Хе-хе, а у Вас ошибочка...
Записи, у которых Inserted.ReceiveMoneyDate is Null вообще не будут вставляться в Payments.
...
Рейтинг: 0 / 0
Как триггером менять вставляемое значение?
    #32018196
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
Эта "ошибочка" преднамеренная. Я изобразил один из вариантов решения, когда значение увеличиваемого времени вообще не задано. Возможно, автора вопроса возникнут другие варианты решения этой проблемы. Ведь в вопросе не оговорено, как он хочет разрешать такую ситуацию.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как триггером менять вставляемое значение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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