триггер на занесение в таблицу.

User avatar
nestor ivanovich
Новичок
Posts: 64
Joined: 26 Nov 2015 22:42

триггер на занесение в таблицу.

Post by nestor ivanovich »

Есть простая таблица, туда вносится запись. Одно из полей может быть как 1 так И 0. По новым условиям должно быть только 0. Пытался зделать триггер типа:
CREATE TRIGGER [dbo].[tr_restricted_csa]
ON [dbo].[OnBoard_Shp_Restrictions]
ON INSERT
AS
BEGIN

UPDATE [dbo].[OnBoard_Shp_Restrictions] SET IsCSABasicsOn = 0
FROM dbo.[OnBoard_Shp_Restrictions]
WHERE OnBoard_Shp_Restrictions_ik = (SELECT ins.OnBoard_Shp_Restrictions_ik FROM inserted ins)
END

И на ON INSERT, И на AFTER INSERT, И даже INSTEAD INSERT, но строке просто на заносится в таблицу.
Где тут собака порылась?
User avatar
Helmsman
Уже с Приветом
Posts: 6449
Joined: 15 May 2003 00:04
Location: LA

Re: триггер на занесение в таблицу.

Post by Helmsman »

Не должен ли внутренний select возвращать ровно одно значение? Может он больше одного возвращает.
User avatar
nestor ivanovich
Новичок
Posts: 64
Joined: 26 Nov 2015 22:42

Re: триггер на занесение в таблицу.

Post by nestor ivanovich »

Helmsman wrote:Не должен ли внутренний селецт возвращать ровно одно значение? Может он больше одного возвращает.
Я всегда думал, что возвращаются те строчки, которые были внесены. Поскольку я вношу одну строку, то И должно возвращать одну. Думаю, что сдесь проблема не в скрипте, а принципиально в обработке триггера.
User avatar
ie
Уже с Приветом
Posts: 11019
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: триггер на занесение в таблицу.

Post by ie »

nestor ivanovich wrote: И на ON INSERT, И на AFTER INSERT, И даже INSTEAD INSERT, но строке просто на заносится в таблицу.
Где тут собака порылась?

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

SQLServer?

структура таблицы и insert statement
в студию.
User avatar
nestor ivanovich
Новичок
Posts: 64
Joined: 26 Nov 2015 22:42

Re: триггер на занесение в таблицу.

Post by nestor ivanovich »

ie wrote:
nestor ivanovich wrote: И на ON INSERT, И на AFTER INSERT, И даже INSTEAD INSERT, но строке просто на заносится в таблицу.
Где тут собака порылась?

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

SQLServer?

структура таблицы и insert statement
в студию.
CREATE TABLE [dbo].[OnBoard_Shp_Restrictions](
[OnBoard_Shp_Restrictions_ik] [int] IDENTITY(1,1) NOT NULL,
[IsAuthorityOn] [bit] NULL,
[IsCSABasicsOn] [bit] NULL,
[IsInsuranceOn] [bit] NULL,
[IsHazmat] [bit] NULL,
[IsSafety] [bit] NULL,
CONSTRAINT [PK_OnBoard_Shp_Restrictions] PRIMARY KEY CLUSTERED
(
[OnBoard_Shp_Restrictions_ik] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

ALTER PROCEDURE [dbo].[nsp_OnBoard_insertupdate_Restrictions]
@OnBoard_Shp_Restrictions_ik int
,@IsAuthorityOn bit = null
,@IsCSABasicsOn bit = null
,@IsInsuranceOn bit = null
,@IsHazmat bit = null
,@IsSafety bit = null
AS
BEGIN

SET NOCOUNT ON;

delete from OnBoard_Shp_Restrictions where OnBoard_Shp_Restrictions_ik = @OnBoard_Shp_Restrictions_ik

INSERT INTO OnBoard_Shp_Restrictions
(IsAuthorityOn
,IsCSABasicsOn
,IsInsuranceOn
,IsHazmat
,IsSafety
)
VALUES
(@IsAuthorityOn
,@IsCSABasicsOn
,@IsInsuranceOn
,@IsHazmat
,@IsSafety
)
END

Сразу скажу, код не мой. Так что код не ругайте.
User avatar
ie
Уже с Приветом
Posts: 11019
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: триггер на занесение в таблицу.

Post by ie »

nestor ivanovich wrote:
ALTER PROCEDURE [dbo].[nsp_OnBoard_insertupdate_Restrictions]
запустил. все работает.
кагда вы тестируете надеюсь вы детаете что то типа:

select * from OnBoard_Shp_Restrictions
order by OnBoard_Shp_Restrictions_ik desc

пачиму спрашивую, процедура хоть и принимает @OnBoard_Shp_Restrictions_ik как параметер,
в реальности key будет сгенерирован сервером, так как field has identity ON.
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: триггер на занесение в таблицу.

Post by АццкоМото »

nestor ivanovich wrote:Одно из полей может быть как 1 так И 0. По новым условиям должно быть только 0.
тогда это поле надо просто удалить, а не триггеры намыливать
Мат на форуме запрещен, блдж!
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Re: триггер на занесение в таблицу.

Post by katit »

Удалить может и не надо т.к. Старые единицы могут пригодиться. А вот сделать check constraint и ignore old data on creation самое оно
Лучше водки — хуже нет! ©
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: триггер на занесение в таблицу.

Post by Dmitry67 »

Сделайте пустой instead of insert
Строка должна перестать вноситься
Потом сделайте там нужный insert, не update
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014

Return to “Вопросы и новости IT”