gpt4 book ai didi

c# - SSIS 包。检查表是否存在,如果不存在则创建 Truncate

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:20 24 4
gpt4 key购买 nike

我是 SSIS 的新手,我必须创建一个 SSIS 包来将数据从一个数据库迁移到另一个数据库。我想通过检查目标数据库中是否存在多个表来启动包。如果它们确实存在,我想截断它们,如果它们不存在,我想创建它们。执行此操作的最佳方法是什么。

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

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

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

谢谢

最佳答案

您需要使用带有纯 T-SQL 代码的 Execute SQL Task。 (更准确地说:Execute SQL TaskExecute T-SQL Statement Task )。

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

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

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

关于c# - SSIS 包。检查表是否存在,如果不存在则创建 Truncate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26885213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com