如何在SSIS

时间:2018-02-21 17:34:25

标签: sql sql-server join ssis etl

我一直致力于为学校项目创建/加载数据到数据库,并且在Merge Join方面遇到了一些问题。我已经研究了其他人在Merge Join中遇到的许多问题,并且通常会解决我自己的问题,但这个问题有点棘手。我已经创建了一个SSIS包,它应该从Access中的表中提取一个列(此列包含我在数据流中稍后使用的重复名称)以及从我的SQL Server数据库中的表中提取另一列。对于这两个OLE DB源我尝试使用通过数据访问模式选择表的简单方法但我认为这可能导致许多警告消息,因为它总是从表中拉出所有内容而不是从每个我想要的。我现在使用SQL Command选项和一个非常简单的查询(见下文)。

SELECT DISTINCT Name
FROM NameTable

对于两个OLE DB源,除了所选参数外,查询是相同的。在源代码之后,我对每个数据进行了数据转换(因为我发现当数据类型不匹配时Merge Join是一个三色堇)并且我将Access一个从DT_WSTR转换为DT_STR,而SQL Server源是从DT_I4转换的到DT_STR。然后,我按照两种方式进行操作,通过Name和Tid的副本,检查“删除带有重复行的排序”选项。在该步骤之后,我开始使用Merge Join,其中Access源是我的左侧输入和SQL Server Source(通过源我只是指数据流的一侧,您将在下面的图像中看到)是正确的输入。下面我还将展示如何配置Merge Join,以防我做错了。最后,我有我的OLE DB目标设置将此数据放入一个表中,其中包含以下列:PrimaryKey列(插入新数据时自动递增),Name列和Tid列。

当我运行列时,它表示成功没有错误。我检查了我的数据库并且没有写任何内容,我还注意到在SSIS中它写了0行。我不确定发生了什么,因为我在排序和合并连接之间启用数据查看器,并且可以看到两个管道中的数据。另一个需要注意的重要事项是,当我在Merge Join之后启用数据查看器时,它在我运行包时从不显示,只显示排序后的两个。起初我想也许数据不是来自Merge Join,所以我尝试在Merge Join之后放置派生列,当然,数据确实流过了。即使在Merge Join和Destination之间存在额外的东西,数据查看器也不会弹出。我提到这个是因为我怀疑这是问题的一部分。下面是我运行包后SSIS吐出的消息。

Data Flow

Merge Join Config

SSIS消息:

  

SSIS包" C:\ Users \ Liono \ Documents \ Visual Studio 2015 \ Projects \ DataTest6 \ Package.dtsx"开始。

     

信息:数据流任务中的0x4004300A,SSIS.Pipeline:验证阶段正在开始。

     

信息:数据流任务中的0x4004300A,SSIS.Pipeline:验证阶段正在开始。

     

信息:0x40043006在数据流任务,SSIS.Pipeline:准备执行阶段开始。

     

信息:0x40043007在数据流任务,SSIS.Pipeline:预执行阶段开始。

     

信息:数据流任务中的0x4004300C,SSIS.Pipeline:执行阶段开始。

     

信息:0x40043008在数据流任务,SSIS.Pipeline:后执行阶段开始。

     

信息:数据流任务中的0x4004300B,SSIS.Pipeline:" OLE DB Destination"写了0行。

     

信息:0x40043009在数据流任务,SSIS.Pipeline:清理阶段开始。

     

SSIS包" C:\ Users \ Liono \ Documents \ Visual Studio 2015 \ Projects \ DataTest6 \ Package.dtsx"完成:成功。

     

节目' [9588] DtsDebugHost.exe:DTS'已退出代码0(0x0)。

最后,我确实提出了一个类似的问题并通过使用一个具有正确SQL查询的源来自行解决,但同样的事情在这里不适用,因为我从两个不同的来源拉动而且我有合并问题这一次加入。我上次使用的代码:

SELECT a.T1id,
b.T2id,
c.Nameid 
FROM Table1 AS a join 
Table2 AS b
On a.T1id = b.T2id,
Name AS c
ORDER BY a.[T1id] ASC

我发布这个是因为,也许有人可能知道一种方法来纠正一些SQL,这将允许我再次使用Merge Join放弃,在那里我可以以某种方式获取两组数据并加入它们,然后将它们转储到我的表中SQL Server。

与往常一样,我非常感谢您的帮助,如果有任何需要澄清的问题,请询问,我会尽力帮助您。

谢谢!

0 个答案:

没有答案