更新后,我在 CONTENT 表上有一个触发器。在表中,当 MESSAGE 列值更新触发器必须根据国家/地区将具有 CONTENT_ID 和 MESSAGE 的新记录插入到 4 个不同表之一中。将根据 CONTENT 表中的 CONTENT_ID 列值从 CONTENT_COUNTRY_INFO 表中检索国家值。4 个不同的表是 CONTENT_IN、CONTENT_MY、CONTENT_CN、CONTENT_HK。我正在按照以下方式进行操作。但不知何故,很少有行没有插入到区域表中,也没有将 MESSAGE 列更新为“已移动”。
ALTER TRIGGER CONTENT_MOVE_TRG ON CONTENT
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON
DECLARE @V_CONTENTID INT
DECLARE @V_COUNTRY VARCHAR(10)
DECLARE CONTENTIDS CURSOR LOCAL FOR SELECT TR.CONTENT_ID FROM CONTENT TR INNER JOIN INSERTED I ON TR.CONTENT_ID = I.CONTENT_ID
OPEN CONTENTIDS
FETCH NEXT FROM CONTENTIDS INTO @V_CONTENTID
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @V_COUNTRY = COUNTRY_NAME FROM CONTENT_COUNTRY_INFO WHERE CONTENT_ID = @V_CONTENTID
IF @V_COUNTRY = 'CN' BEGIN
INSERT INTO CONTENT_CN(CONTENT_ID,MESSAGE) SELECT CONTENT_ID, MESSAGE FROM CONTENT WHERE CONTENT_ID = @V_CONTENTID
END
ELSE IF @V_COUNTRY = 'IN' BEGIN
INSERT INTO CONTENT_IN(CONTENT_ID,MESSAGE) SELECT CONTENT_ID, MESSAGE FROM CONTENT WHERE CONTENT_ID = @V_CONTENTID
END
ELSE IF @V_COUNTRY = 'HK' BEGIN
INSERT INTO CONTENT_HK(CONTENT_ID,MESSAGE) SELECT CONTENT_ID, MESSAGE FROM CONTENT WHERE CONTENT_ID = @V_CONTENTID
END
ELSE IF @V_COUNTRY = 'MY' BEGIN
INSERT INTO CONTENT_MY(CONTENT_ID,MESSAGE) SELECT CONTENT_ID, MESSAGE FROM CONTENT WHERE CONTENT_ID = @V_CONTENTID
END
FETCH NEXT FROM CONTENTIDS INTO @V_CONTENTID
END
UPDATE CONTENT SET MESSAGE='Moved' WHERE CONTENT_ID IN (SELECT TR.CONTENT_ID FROM CONTENT TR INNER JOIN INSERTED I ON TR.CONTENT_ID = I.CONTENT_ID)
CLOSE CONTENTIDS
DEALLOCATE CONTENTIDS
END
我担心使用游标会出现这类问题,寻找动态查询将记录移动到各自的区域表中。任何想法都会有所帮助!
谢谢,
拉朱