アプリケーションに属するテーブルを処理し、同じアプリケーションに属するテーブルに値を挿入するストアドプロシージャを作成しています(したがって、どちらのテーブルも修正できません)。
新しいレコードのみを処理し、どのレコードが処理されたかを覚えておく必要があります。このために、3番目の単純なテーブルを作成しました。
以下の表は、重要な詳細のみを残すために多くの列が削除されています。
ソーステーブル
CREATE TABLE [dbo].[DETAIL](
[DET_NET] [float] NULL,
[DET_VAT] [float] NULL,
[DET_VATCODE] [varchar](4) NULL,
[DET_GROSS] [float] NULL,
[DET_DATE] [datetime] NULL,
[DET_PRIMARY] [float] NOT NULL
)
ターゲットテーブル
CREATE TABLE [dbo].[TRN_TEMP](
[TRN_TRAN_DATE] [datetime] NULL,
[TRN_DESCRIPTION] [varchar](20) NULL,
[TRN_PRIMARY] [int] NULL,
[TRN_AMT] [float] NULL
)
追跡テーブル
CREATE TABLE REGISTER(
LINE_ID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED NOT NULL,
DET_PRIMARY_LINK FLOAT NOT NULL,
INS_DATE DATETIME NOT NULL
)
ソーステーブルからターゲットテーブルの値に挿入しようとしていますが、ソーステーブルの主キーもトラッキングテーブルに挿入しています。
INSERT INTO TRN_TEMP (TRN_TRAN_DATE, TRN_DESCRIPTION, TRN_AMT)
OUTPUT D.DET_PRIMARY, GETDATE() INTO REGISTER (DET_PRIMARY_LINK, INS_DATE)
SELECT D.DET_DATE, 'SOMETEXT', SUM(D.DET_NET)
FROM DETAIL D
LEFT JOIN REGISTER R ON D.DET_PRIMARY = R.DET_PRIMARY_LINK
WHERE <MY CONDITIONS> AND R.LINE_ID IS NULL -- TO REMOVE LINES ALREADY PROCESSED
GROUP BY D.DET_DATE
上記のテキストに問題はありませんが、「マルチパート識別子'D.DET_PRIMARY'をバインドできませんでした。」というエラーが表示されます。私は両方を試しましD.DET_DETAIL
たDETAIL.DET_DETAIL
が、エラーは同じです。
グループを使用するときに句のソーステーブルの値を使用することはできませんOUTPUT
か、それともフォーマットにエラーがありますか?それが不可能な場合、処理した行を追跡する別の方法はありますか?