SSIS包.检查表是否存在,如果不存在,则在执行截断操作时创建

本文关键字:执行 创建 操作 不存在 检查表 是否 存在 如果不 如果 SSIS | 更新日期: 2023-09-27 18:30:10

我是SSIS的新手,必须创建SSIS包才能将数据从一个数据库迁移到另一个数据库。我想从检查目标数据库中是否存在多个表开始这个包。如果它们确实存在,我想截断它们,如果它们不存在,我想要创建它们。做这件事最好的方法是什么。

我在包的顶部有一个简单的查询,用于返回目标数据库中的所有表

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'

如何将这些结果传递到下一步,以检查这些表名中是否有任何一个包含在表名的列表或数组中

感谢

SSIS包.检查表是否存在,如果不存在,则在执行截断操作时创建

您需要使用带有纯T-SQL代码的Execute SQL Task。(更准确地说:执行SQL任务或执行T-SQL语句任务)。

Execute SQL Task中,您需要指定要使用的连接管理器以及要运行的SQL代码。

任务中的代码应该如下所示:

IF EXISTS(
   SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES 
   WHERE TABLE_TYPE = 'BASE TABLE')
THEN
   TRUNCATE TABLE [BASE TABLE]
ELSE
   CREATE TABLE [BASE TABLE] (...)
END

此任务在包的Control flow中指定,并且应该包括一个约束,以便在任何数据流任务尝试使用受影响的表之前运行它。

请记住,并不是所有的表都可以被截断(如果它们有FK),并且,如果您使用的是IDENTITYPK,它们会随着包的每次运行而增加。因此,也许您应该DROP表和CREATE,然后再执行所有包。考虑到无论如何都必须编写CREATE TABLE脚本。(当然,在删除该表之前,您应该检查该表是否存在)。

我不确定在SSIS中是否有开箱即用的好方法。然而,还有一种替代解决方案,BIML。它有一个轻微的学习曲线,但一旦你通过它,它就非常简单

事实上,本教程似乎正是你想要做的。BIML的好处是你只需写一次,如果你再次需要它,只需几次快速更新即可重新生成新的包。超级强大。试试看。我会让你大吃一惊的。http://bimlscript.com/Walkthrough/Details/73