VS 2012 - 比较表格之间的日期以控制包裹步骤的进展

时间:2015-11-25 02:04:21

标签: sql-server ssis

我创建了一个SSIS包,从各种来源提取数据并根据业务需要对其进行聚合。此处理的目标是创建单个表,例如“Data_Tableau”。此表是已连接Tableau仪表板的数据源。

Tableau仪表板在处理过程中需要可用,因此我不会截断“Data_Tableau”并重新填充SSIS包。相反,SSIS包步骤创建“Data_Stage”。然后包的最后一步是删除/重命名,其中我将“Data_Tableau”和sp_rename“Data_Stage”拖放到“Data_Tableau”。

  

USE dbname
  DROP TABLE Data_Tableau
  EXEC sp_rename Data_Stage,Data_Tableau

在最后一步之前,我希望“Data_Stage”中的max(buydate)大于“Data_Tableau”中的max(buydate),因为“Data_Stage”自上次进程运行以来会有额外的记录。
但是,有时上游数据存在问题,我最终从“Data_Tableau”中的“Data_Stage”= max(buydate)获得max(buydate)。在这种情况下,我不希望最终的放弃/重命名过程运行。相反,我希望工作失败,当我收到失败通知时,我会向相应的上游数据团队发送警报。

这是啰嗦的背景。 我的问题是 ...如何在SSIS包中检查日期并导致失败。我正在使用VS 2012.

我在考虑在最终的放弃/重命名步骤之前创建一个约束,但我之前没有创建变量或表达式,也不确定如何实现这一点。

我还在考虑按如下方式创建一个2行表:

  

SELECT MAX(buydate)'MaxDate','Tableau''FieldType'FROM dbname.dbo.Data_Tableau
  UNION ALL
  SELECT MAX(buydate)'MaxDate','Stage''FieldType'FROM dbname.dbo.Data_Stage

然后使用针对该表的查询作为某种约束,但不确定这是否有意义和/或优于创建变量/表达式的选项。

目标:如果MAX(buydate)来自“Data_Stage”>来自“Data_Tableau”的MAX(buydate),然后我想要删除/重命名步骤,否则它应该失败并且“Data_Tableau”将包含与包运行之前相同的数据。

连连呢?非常感谢逐步指导。

1 个答案:

答案 0 :(得分:0)

我会这样做:

  

然后包的最后一步是删除/重命名,其中我放弃   " Data_Tableau"和sp_rename" Data_Stage"到" Data_Tableau"。

进入由SSIS包调用的存储过程。

然后,只需在代码的这一部分之前使用IF块:

--psuedocode
IF (SELECT MaxBuyDateFromTableA) >= (SELECT MaxBuyDateFromTableB)
  BEGIN
  DROP TABLE Data_Tableau
  EXEC sp_rename Data_Stage, Data_Tableau
  END
ELSE
  --do something else (or nothing at all)