別のテーブル 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