我是SSIS的新手,我必须创建一个SSIS包来将数据从一个数据库迁移到另一个数据库.我想通过检查目标数据库中是否存在多个表来启动程序包.如果它们存在,我想截断它们,如果它们不是我想创建它们.什么是最好的方法来做到这一点.
我在包的最顶部有一个简单的查询来返回目标数据库中的所有表
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
Run Code Online (Sandbox Code Playgroud)
如何将这些结果传递给下一步,以检查这些表名是否包含在表名列表或数组中
谢谢
您需要使用Execute SQL Task纯T-SQL代码.(更确切地说:执行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
Run Code Online (Sandbox Code Playgroud)
此任务Control flow在包的指定中指定,并且应包括在任何数据流任务尝试使用受影响的表之前运行它的约束.
请记住,并非所有表都可以被截断(如果它们有FK),并且如果您使用IDENTITYPK,它们将在每次运行包时增加.所以,也许你应该DROP在表中CREATE然后再对所有的包执行.考虑到你必须编写CREATE TABLE脚本.(当然,你应该在丢弃它之前检查表是否存在).