如何创建仅获取已在表中更新的数据的查询

Asy*_*ous 7 sql t-sql sql-server sql-server-2008

我不知道从哪里开始或者这将如何工作,我希望有人有一个想法或一个经过验证的方法.

为了展示我想要做的事情的一个例子,我创建了一个存储过程,它通过从链接表中获取记录来更新或插入Local表中的新记录.存储过程在SQL Server中作为作业运行,以更新和插入新记录.

我的问题是:有没有办法查询本地表中的数据,以便最初我可以获取所有记录,但只获取已插入的新记录或更新的旧记录?

我不想连续获取所有记录,只添加新记录或更新记录.

这可能吗?

以下是我创建的存储过程,作为更新本地电话数据的示例:

CREATE PROCEDURE sp_UPDATE_PHONE_RECORDS
AS 
BEGIN
MERGE dbo.PHONE_REC AS Target
USING (SELECT MEMBER_ID 
      ,HOME_PHONE = dbo.udf_StdPhoneFmt(HOME)
      ,CELL_PHONE = dbo.udf_StdPhoneFmt(CELL)
      ,WORK_PHONE = dbo.udf_StdPhoneFmt(WORK)

FROM PHONE WHERE MEMBER_ID IS NOT NULL) AS SOURCE

ON (Target.MEMBER_ID = SOURCE.MEMBER_ID)

WHEN MATCHED THEN

    UPDATE SET Target.HOME_PHONE = Source.HOME_PHONE,Target.CELL_PHONE = Source.CELL_PHONE,
    Target.WORK_PHONE = Source.WORK_PHONE

WHEN NOT MATCHED BY TARGET THEN
    INSERT (MEMBER_ID, HOME_PHONE, CELL_PHONE ,WORK_PHONE)

    VALUES (Source.MEMBER_ID, Source.HOME_PHONE, Source.CELL_PHONE, Source.WORK_PHONE);
END
GO
Run Code Online (Sandbox Code Playgroud)

这可能吗?

感谢大家!

RDo*_*Lee 6

我们通常做的是在源表中添加两个日期/时间字段,例如Source.LastModifiedOn和Source.CreatedOn.

然后,当作业运行以更新目标表时,您可以说自上次作业运行以来获取所有Source.LastModifiedOn和Source.CreatedOn行,并根据行执行更新/插入.

当然,您需要确保正确设置Source.LastModifiedOn和Source.CreatedOn.