0

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

我想对这些情况进行检查,如果它为空,则从 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
4

1 回答 1

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
于 2013-10-31T18:45:21.863 回答