尝试使用 SSIS 遍历表列表并从中删除

Trying to loop through, and delete from, a list of tables using SSIS

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

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

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

如果有帮助,我将 post 下面是我正在使用的两个 SQL 命令的图像。我也可以 post foreach 循环,或与任一命令有关的不同信息。对于我的问题的含糊不清,我再次表示歉意,我对 SSIS 还不够熟悉,还不知道提供哪些信息是有用的。不幸的是,我没有足够的代表直接 post 图片,所以我只提供链接。

清除命令SQL命令

删除SQL命令

是的,您将第二个 SQL 任务设置错了。当您 select "Variable" 作为 SQLSourceType 时,SourceVariable 值应该是包含您的 SQL 语句文本的 SSIS 变量的名称。

所以 "DELETE FROM WHERE DATEADD(..."

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

您似乎没有将 for each loop container 的每个循环的结果绑定到您的 TableName 变量。 请双击您的 for each loop container 然后转到 variable mapping, 然后确保将索引 0 分配给变量 TableName。谢谢

感谢您的回答,我已经解决了问题,但我仍然不太确定如何解决。被激怒了,我决定开玩笑地尝试删除负责执行清除的 SQL 命令,然后以相同的方式重新创建它。莫名其妙地解决了这个问题。

就像我在问题中所说的那样,我对 SSIS 包的形成方式一无所知,但我想在幕后存储了大量元数据和其他信息。我想既然我接手了一个别人一直在做的项目,我所做的改变就有可能以某种方式破坏了工作。显然是这样的。无论如何,再次感谢您的帮助。