SQL触发器未更新字段

时间:2018-10-04 18:20:16

标签: sql-server database-trigger

当我在一个表中选择一个值时,必须在另一个表中填充相同的值。 例如: 请参阅所附图片: enter image description here

我遇到的问题是,当我更新第一个字段舞台(左侧)时,例如Stage2,ustage字段保持不变。它也应该更新到Stage2。

Ustage表具有与Stage表相同的Stage值,所以我知道它需要选择相应的Value,但是我已经尝试了各种尝试来使它起作用,但是它不想更新:

这是我的触发代码:

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字段。

下面是Stage表中的数据

enter image description here

如果我在下面更改字段“舞台”,那么“ Ustage”也需要更改。目前,它没有这样做:

enter image description here

机会表有50列,阶段表有2列。 当我将机会表上的阶段更改为Stage2时,Ustage值也必须更改为Stage2。两个值都必须对应

1 个答案:

答案 0 :(得分:0)

您的触发代码有很多问题,但这肯定会导致它不起作用:

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

在该行代码之前,您永远不会填充@ID,因此其值为NULL。因此,您将获得NULL的{​​{1}},这是您稍后插入@Stage列中的内容。

也许您打算在该行上使用O_UStage而不是@RecordId