选择语句从 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_NUMBERs 可以运行,我想一次运行一个,但我不想每次运行时都将 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)的主要内容,如果未能解决你的问题,请参考以下文章

从一个数据库表插入到另一个

Netezza - 从 SQL 语句中获取已删除记录的计数

极慢的 Netezza(数据库)批量插入

使用外部表逻辑在 netezza 中加载数据时出错

在 netezza 存储过程中立即执行不会向表中插入值

Netezza 中的代理键 - SSIS 和 Netezza 序列