0

別のテーブル USER のデータと同期する必要がある GLOBAL_TRACKING という名前のルックアップ テーブルがあります。フロント エンドでのユーザー アカウント作成の特定のインスタンスのコードに問題があるため (私は知っています - 理想的には、これをコードで修正する必要がありますが、そのオプションはありません)、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
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 に答える