我正在编写一个存储过程来处理属于应用程序的表并将值插入属于同一应用程序的表中(因此我无法修改任何一个表)。
我必须只处理新记录并记住哪些记录已被处理,为此我创建了第三个简单表。
下面是表格,删除了许多列,只留下重要的细节。
源表
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
或者我的格式是否有错误?如果不可能,是否有另一种方法可以跟踪我处理了哪些行?