提取尚未使用 SQL Server 存储过程提取的行



我有一个表格Customers .我正在尝试设计一种方法,每天从Customers表中提取数据并创建此数据的 CSV。我只想选择那些尚未提取的记录。如何跟踪它是否已提取?我无法更改Customers表以添加标志。

到目前为止,我计划使用具有此标志的舞台表。因此,我正在编写一个存储过程来从Customers表中获取数据,并将每个记录的标志设置为 0。在从阶段表中提取此数据后,使用 SSIS 创建 CSV,并在将记录提取到 CSV 后,使用 flag=1 更新这些记录的临时表。

这个问题的好设计是什么?

客户表:

CustomerID | Name | RecordCreated | RecordUpdated

创建另一个具有列CustomerID tblExportedEmpID表。将从Customer表中提取的每个客户的客户 ID 添加到该新表中。要从尚未提取的Customer表中提取客户,您可以使用此查询:

select * from customer where customerid not in(select customerid from tblExportedEmpID)

你有RecordCreatedRecordUpdated。 如果您有这些信息,为什么还要为每个表单独记录呢?

您需要创建一个表或等效的"保存到下次运行"数据区域。 你让脚本做的第一件事是获取当前时间,以及存储在该数据区域的任何内容。 然后,让您的语句查询所有内容:

SELECT <list of columns and transformation>
FROM Customers
WHERE recordCreated >= :lastRunTime AND recordCreated < :currentRunTime

(或recordUpdated,如果客户姓名更改时需要重新提取)
请注意,您希望独占上限 ( < ) 涵盖存储时间戳的分辨率低于获取时间戳的机制的情况。

对于最后一步,将运行开始(无论脚本抓取"当前时间"是什么)存储到"保存到下次运行"数据区域中。

最新更新