我有一个表格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)
你有RecordCreated
和RecordUpdated
。 如果您有这些信息,为什么还要为每个表单独记录呢?
您需要创建一个表或等效的"保存到下次运行"数据区域。 你让脚本做的第一件事是获取当前时间,以及存储在该数据区域的任何内容。 然后,让您的语句查询所有内容:
SELECT <list of columns and transformation>
FROM Customers
WHERE recordCreated >= :lastRunTime AND recordCreated < :currentRunTime
(或recordUpdated
,如果客户姓名更改时需要重新提取)
请注意,您希望独占上限 ( <
) 涵盖存储时间戳的分辨率低于获取时间戳的机制的情况。
对于最后一步,将运行开始(无论脚本抓取"当前时间"是什么)存储到"保存到下次运行"数据区域中。