【问题标题】:SSIS - SQL Querying a flat file , then insert depending on resultsSSIS-SQL 查询平面文件,然后根据结果插入
【发布时间】:2012-08-05 16:10:27
【问题描述】:

我的任务是实现将数据从平面 csv 文件 (A) 加载到 SQL Server 数据库 (B)。现在,虽然我是 SSIS 的初学者,但我发现进行传输相当简单。问题是,来自 CSV (A) 的数据必须加载到 (B) 内的四个不同表中,我需要在插入之前检查现有数据。

例如,(A) CSV 中有一个名为 SERVER_VERSION 的列,包含在以下结构中:[SERVER].[VERSION]

我需要做什么: 1. 从 (A) 列中检索服务器和版本作为单独的信息(简单修剪) 2. 对 (B) 版本表运行选择查询以搜索此信息 3.如果没有结果,我将(A)中的信息插入(B)服务器表中,该表有一个服务器列和一个版本列

FLATFILE_SOURCE -> EXTRACT_SERVER_VERSION -> CHECK_VERSION -> INSERT_VERSION ->SQL_DESTINATION

当然,我想对 CSV 中的每一行都这样做。

现在,我最初的想法是使用数据流进行此验证,其中平面文件源通过脚本组件传递,该脚本组件将从平面文件中提取服务器和版本。但我觉得这是一种相当面向对象的方法,似乎不适合在 SSIS 中使用。

Q1:我从脚本中获得的数据需要在 (B) 的 SELECT 查询中使用。我实现这一点的最佳途径是什么?我可以将脚本的结果输出到数据流之外的 EXECUTE SQL QUERY,还是直接在脚本内尝试 sql 查询会更好?我很确定这不是正确的查看方式,因为这是数据分析,而不是转换。

Q2:我可以使用某种缓存/缓冲区来存储临时信息,例如服务器和版本的配对值吗?可以在数据流之外全局访问吗?

Q3:然后呢?我需要插入在数据库中找不到的行。同样,我是否最好将 SELECT 查询的结果输出到 EXECUTE SQL 任务?如何在结果中循环并插入正确的信息。

现在,我创建源和目标没有问题,但到目前为止脚本任务的运气并不好,更重要的是,运行我需要的 SQL 查询的最佳方法是什么,然后分析其中的信息并采取行动.

我知道这很模糊,听起来比实际复杂得多,但我似乎无法找到有关这种操作的信息。我看到的典型教程要么没有涵盖这种操作,要么技术问题超出了我需要做的范围。我所在部门的人也没有真正的 SSIS 经验,所以我真的可以使用一些技巧。我不是要特定的代码,一些关于如何组织它的提示真的会帮助我!

谢谢

PS : 是的,我知道这对 .net 程序来说是小菜一碟!

【问题讨论】:

  • 您提到您认为使用数据流不合适,但对我来说似乎非常合适。这正是数据流的任务。

标签: sql ssis


【解决方案1】:

将平面文件导入临时表。然后你可以使用execute SQl任务来标记你要导入的记录 然后您可以对各个表进行导入。

我从来没有在没有临时表的情况下进行导入(实际上我们使用了两个,一个用于原始数据,一个用于清理后的数据)如果有数据,则可以更轻松地返回查看原始数据是什么样的以后的问题。

【讨论】:

  • 是否有其他工具可以直接从文件中查询,而不是将这些记录导入 SQL Server 然后从那里查询?
猜你喜欢
  • 2014-11-08
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
相关资源
最近更新 更多