当我在一个表中选择一个值时,必须在另一个表中填充相同的值。 例如: 请参阅所附图片:
我遇到的问题是,当我更新第一个字段舞台(左侧)时,例如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表中的数据
如果我在下面更改字段“舞台”,那么“ Ustage”也需要更改。目前,它没有这样做:
机会表有50列,阶段表有2列。 当我将机会表上的阶段更改为Stage2时,Ustage值也必须更改为Stage2。两个值都必须对应
答案 0 :(得分:0)
您的触发代码有很多问题,但这肯定会导致它不起作用:
SELECT @Stage = STAGE FROM STAGE WHERE ID = @ID;
在该行代码之前,您永远不会填充@ID
,因此其值为NULL
。因此,您将获得NULL
的{{1}},这是您稍后插入@Stage
列中的内容。
也许您打算在该行上使用O_UStage
而不是@RecordId
?