插入时更正记录条目(SQL触发器)

时间:2013-10-31 18:28:07

标签: sql sql-server triggers

我有一个名为GLOBAL_TRACKING的查找表,需要与另一个表USER中的数据同步。由于前端用户帐户创建的特定实例中的代码存在一些问题(我知道 - 理想情况下,这应该在代码中修复,但我没有这个选项),我在GLOBAL_TRACKING中获取条目为永远不应为NULL的字段设置NULL值的表。由于这仅在初始帐户创建时发生,我可以假设USER记录的LOGIN_ID字段应始终与GLOBAL_TRACKING表的ALT_ID字段匹配。

我想检查这些情况,如果它为null,请从USER表中提取LOGIN_ID值,然后在插入之前将其插入GLOBAL_TRACKING表的ALT_ID字段。我试过做一个常规的插入触发器(在插入时更新它),但没有成功。我正在尝试'INSTEAD OF INSERT'触发器,并遇到类似的错误(它被困在应用程序级别,但例外:“无效的对象名称'UPDATED'。”)。这样的事情可能吗?这是我的而不是触发器:

    DECLARE @GlobalID     as NVARCHAR(50)
    DECLARE @AlternateID  as NVARCHAR(255)

    SET @GlobalID = (SELECT GLOBAL_ID FROM inserted)

    SET @AlternateID = (SELECT ALT_ID FROM inserted)

    IF (@AlternateID IS NULL
        AND ((SELECT COUNT(LOGIN_ID)
              FROM USER
              WHERE USER_ID = @GlobalID) > 0))
    BEGIN
        SET @AlternateID = (SELECT LOGIN_ID
                            FROM USER
                            WHERE USER_ID = @GlobalID)
        BEGIN
            UPDATE GLOBAL_TRACKING
            SET ALT_ID = @AlternateID 
            WHERE GLOBAL_ID = @GlobalID
        END
    END

1 个答案:

答案 0 :(得分:0)

沿着这个

DECLARE @GlobalID     as NVARCHAR(50)
    DECLARE @AlternateID  as NVARCHAR(255)

    SET @GlobalID = (SELECT GLOBAL_ID FROM inserted)
DECLARE @SQL VARCHAR(2000)

SET @SQL='SELECT ALT_ID FROM inserted where GLOBAL_ID= ''' + @GlobalID+'''' ;

EXEC (@SQL)


    SET @AlternateID = EXEC (@SQL)

    IF (@AlternateID IS NULL
        AND ((SELECT COUNT(LOGIN_ID)
              FROM USER
              WHERE USER_ID = @GlobalID) > 0))
    BEGIN
        SET @AlternateID = (SELECT LOGIN_ID
                            FROM USER
                            WHERE USER_ID = @GlobalID)
        BEGIN
            UPDATE GLOBAL_TRACKING
            SET ALT_ID = @AlternateID 
            WHERE GLOBAL_ID = @GlobalID
        END
    END