Sql 触发器中不同表的动态查询

Sql 触发器中不同表的动态查询,sql,sql-server,triggers,cursor,dynamicquery,Sql,Sql Server,Triggers,Cursor,Dynamicquery,更新后,我在内容表上有一个触发器。在表中,当消息列值更新时,触发器必须根据国家/地区将一条带有CONTENT_ID和MESSAGE的新记录插入4个不同的表中。 国家/地区值将根据内容表中的内容ID列值从内容\u国家/地区信息表中检索。 4个不同的表格是CONTENT\u IN、CONTENT\u MY、CONTENT\u CN、CONTENT\u HK。 我是这样做的。但不知何故,很少有行没有插入到区域表中,也没有将消息列更新为“Moved” 我担心使用游标时会出现此类问题,因为需要使用动态查询

更新后,我在内容表上有一个触发器。在表中,当消息列值更新时,触发器必须根据国家/地区将一条带有CONTENT_ID和MESSAGE的新记录插入4个不同的表中。 国家/地区值将根据内容表中的内容ID列值从内容\u国家/地区信息表中检索。 4个不同的表格是CONTENT\u IN、CONTENT\u MY、CONTENT\u CN、CONTENT\u HK。 我是这样做的。但不知何故,很少有行没有插入到区域表中,也没有将消息列更新为“Moved”

我担心使用游标时会出现此类问题,因为需要使用动态查询将记录移动到各自的区域表中。 任何想法都会有帮助

谢谢,

Raju

为什么有相同结构的单独表,只通过表名后缀来区分?在许多情况下,这是一个糟糕设计的标志。同意。但实际上,这是区域负责人的业务要求。经理应该描述业务需求,而不是技术布局。有很好的理由将数据拆分为多个表,但这听起来似乎不是一个好理由。有人知道这种情况吗?
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