选择语句从 Netezza 数据库中获取数据并插入 SQL Server 数据库 (SSIS)
Posted
技术标签:
【中文标题】选择语句从 Netezza 数据库中获取数据并插入 SQL Server 数据库 (SSIS)【英文标题】:Select statement to grab data from a Netezza database and insert into a SQL Server database (SSIS) 【发布时间】:2018-01-27 19:22:27 【问题描述】:我正在使用 SSIS 从 Netezza 数据库中获取数据并插入到 SQL Server 数据库中。我有查询工作,前 2 个查询使用数据流任务从 Netezza(基于 ID_NUMBER
)抓取并插入 SQL Server。
我有 15 个不同的 ID_NUMBER
s 可以运行,我想一次运行一个,但我不想每次运行时都将 ID_NUMBER
硬编码到 SQL 语句中不同的ID_NUMBER
。
有没有一种方法可以循环遍历每个 ID_NUMBER
而无需在 SQL 语句中对它们进行硬编码?
【问题讨论】:
每次必须指定ID_NUMBER
?或者您在处理之前从表中提取此 ID_NUMBER??
从表中选择 ID_NUMBER,其中 ID_NUMBER = 'S12345'。有没有办法单独循环遍历每个 ID_NUMBER?就像通过数组或其他东西传递它们?
您正在从表中选择 ID_NUMBER,然后您需要遍历结果并为每个 ID_NUMBER 执行数据流任务?
我会处理这个,看看我能做什么。我会让你知道我的结果。非常感谢哈迪!
在这种情况下,@Hadi 的链接正是你想要的
【参考方案1】:
使用 ODBC 源更新 1
根据您正在使用 ODBC 源的 cmets
在 ODBC 中,您不能使用参数(提供的链接中的相同逻辑),您必须将表达式分配给 ODBC Source
的 SqlCommand 属性
-
点击数据流任务
在“属性”选项卡中(按 F4 显示)转到表达式
为[ODBC Source].[SqlCommand]
属性分配一个类似的表达式
"SELECT * FROM MyTable WHERE [id] = " + (DT_WSTR,50)@[User::id]
点击数据流任务并将Delay Validation
属性更改为True
使用执行 SQL 任务 + Foreach 循环容器
-
您必须使用执行 SQL 语句并将 ID 存储在结果集中。
然后使用 For each 循环容器循环遍历 ID
在 foreach 循环容器内添加一个 DataFlow 任务
在 Dataflow 任务中,使用来自变量的 SQL 命令作为源,并且必须将变量构建为表达式
有关分步教程,您可以参考以下链接:
Implementing Foreach Looping Logic in SSIS【讨论】:
现在卡住了,因为我使用的是 ODBC 连接而不是 OLEDB。 ODBC 数据源在源代码编辑器中没有参数按钮。 你必须使用表达式,参考上面的链接 在表达式中你必须使用以下逻辑"SELECT * FROM MyTable WHERE [id] = " + @[User::id]
只需点击数据流任务,在属性选项卡中,转到表达式,然后将表达式分配给[ODBC Source].[SqlCommand]
属性
哈迪,你真是个天才!我在 *** 上从你那里学到的东西比我在大学上的 2 个 SQL 课程中学到的更多。非常感谢!以上是关于选择语句从 Netezza 数据库中获取数据并插入 SQL Server 数据库 (SSIS)的主要内容,如果未能解决你的问题,请参考以下文章