尝试使用SSIS循环并删除表列表

问题描述 投票:1回答:3

我目前正在为数据库建立存档和清除过程。我从几天前离开的一名员工那里继承了这项任务 - 过去几个月他一直在研究它(不经常),所以我不得不花很长时间来回顾他的步骤以便说出并试图弄清楚如何他把这一切都安排好了。我们正在使用计划任务来执行我们的归档过程,并且我已准备好部署该部分。但是,我们正在使用SSIS包来处理清除过程,而且我从来没有创建或修改过SSIS包,所以我遇到了一些问题,我坦率地说它甚至不确定从哪开始排除故障。

本质上,我们有一个表用于存储将被存档(并最终被清除)的表列表,该表还记录了表需要清除的顺序,以避免留下任何孤立的记录或FK冲突。然后,SSIS包的目的是加载表的列表,根据清除顺序排序,然后遍历每个表并根据引用每个记录的存档日期的WHERE子句从中删除它们。我认为我遇到的一个问题是表名不能用作SQL命令中的参数,尽管尝试了几种方法来解决这个问题,但我无法让它正常工作。

基于我在其他地方读到的内容,我尝试创建一个包含我正在尝试执行的SQL语句的变量,然后选择该变量作为SQL语句的源,但我仍然没有做到正确。我想我可能会从包含SQL命令的foreach循环中错误地提取表名,但我不确定我做错了什么。

如果有帮助,我会在下面发布我正在使用的两个SQL命令的图像。我也可以发布foreach循环,或者发布与任一命令有关的不同信息。我再次为我的问题含糊不清道歉,我对SSIS还不是很熟悉,但实际上还不知道哪些信息有用。遗憾的是,我没有足够的代表直接发布图片所以我只提供链接。

清除命令SQL命令

image1

删除SQL命令

image2

sql-server ssis etl
3个回答
2
投票

是的,你已经设置了第二个SQL任务错误。当您选择“变量”作为SQLSourceType时,SourceVariable值应该是包含SQL语句文本的SSIS变量的名称。

所以而不是“DELETE FROM WHERE DATEADD(......”

您的SourceVariable值应该类似于“User :: SqlCmd”,并且您应该使用要执行的完整SQL命令填充SqlCmd变量。


2
投票

似乎你没有将for each loop container的每个循环的结果绑定到你的TableName变量。请双击你的for each loop container然后去variable mapping,然后确保将指数0指定给变量TableName。谢谢


1
投票

谢谢你的答案,我已经解决了问题,虽然我还不太清楚如何。恼怒的是,我决定尝试删除负责执行清除的SQL命令,然后以相同的方式重新创建它。莫名其妙地解决了这个问题。

就像我在问题中所说的那样,我对SSIS包的形成方式一无所知,但我想在幕后存储了大量的元数据和其他信息。我想,因为我正在接受别人一直在做的项目,所以我所做的改变有可能以某种方式搞砸了作品。显然情况就是如此。无论如何,再次感谢你的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.