0

更新后,我在 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

我担心使用游标会出现这类问题,寻找动态查询将记录移动到各自的区域表中。任何想法都会有所帮助!

谢谢,
拉朱

4

0 回答 0