Триггер SQL не обновляет поле - PullRequest
0 голосов
/ 04 октября 2018

Когда я выбираю значение в одной таблице, то же самое значение должно заполнять другую таблицу.Например: см. Прикрепленное изображение: enter image description here

Проблема, с которой я сталкиваюсь, заключается в том, что когда я обновляю первый полевой этап (слева), скажем, Stage2, поле uStage остаетсято же самое .. Она должна обновиться и до Stage2 ..

Таблица Ustage имеет те же значения этапа, что и таблица Stage, поэтому я знаю, что ей нужно выбрать соответствующее значение, однако я пробовал все виды, чтобы получить этона работу, но не хочет обновлять:

Вот мой триггерный код:

USE [SKY]
GO

/****** Object:  Trigger [dbo].[SetIT]    Script Date: 2018/10/04 19:52:06 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[SetIT] ON [dbo].[AMGR_Opportunity_Tbl]
AFTER INSERT
AS
DECLARE @RecordId int
DECLARE @Stage varchar(750)
Declare @ID int
begin
--check to see if we have any records in the inserted set
IF EXISTS( SELECT * FROM inserted ) BEGIN

--set up the cursor that we use to iterate over the recordset
DECLARE I CURSOR LOCAL FAST_FORWARD FOR
SELECT Record_Id FROM Inserted;
OPEN I
FETCH NEXT FROM I INTO @RecordId;
WHILE @@FETCH_STATUS = 0 BEGIN


SELECT @Stage = STAGE FROM STAGE WHERE ID = @ID;


--insert the UDF value
INSERT INTO O_Ustage(Client_id,Contact_Number,O_Ustage)
SELECT Opp_Id, 0, @Stage
FROM inserted WHERE Record_Id = @RecordId AND Opp_Type = 0;


--update the current stage

    UPDATE stage set stage=@stage WHERE  
    ID=@ID;


FETCH NEXT FROM I INTO @RecordId;
END
CLOSE I
DEALLOCATE I
END
END
GO

Пожалуйста, помогите мне разобраться, как обновить поле USTAGE.

Ниже приведены данные, которые находятся в рабочей таблице

enter image description here

Если я изменю поле «Этап» ниже, то также необходимо будет изменить «Использование».На данный момент он этого не делает:

enter image description here

Таблица возможностей состоит из 50 столбцов и таблицы этапов 2.Когда я изменяю стадию в таблице возможностей на Stage2, тогда значение Ustage также должно меняться на Stage2. Оба значения должны соответствовать

1 Ответ

0 голосов
/ 04 октября 2018

Ваш код триггера имеет много проблем, но вот тот, который определенно заставит его не работать:

SELECT @Stage = STAGE FROM STAGE WHERE ID = @ID;

До этой строки кода вы никогда не заполняете @ID, поэтому это значениебудет NULL.Следовательно, вы получите NULL для @Stage, который вы позже вставите в столбец O_UStage.

Может быть, вы хотели использовать @RecordId в этой строке вместо @ID?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...