我正在使用存储过程填充SSIS 2008中的ado net数据集。结果集包含21列。当在SSIS中使用For Each循环时,似乎如果我想要前两列,那么第20列我不能使用索引0,1,19。看来我必须使用2-18的create mappings我想使用索引19.有没有办法只使用你想要的字段?
提前致谢。
答案 0 :(得分:3)
工作正常,我不确定你遇到了什么。
我创建了一个基本包,其中包含一个执行SQL任务,并将其输入到Foreach循环容器中。
我的源代码查询很丑,但它满足了我的懒惰
SELECT
*
FROM
(
SELECT TOP 21
CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS int) AS rn
FROM
sys.all_columns AS AC
) D
PIVOT
(
max(rn)
FOR rn IN ([1]
, [2]
, [3]
, [4]
, [5]
, [6]
, [7]
, [8]
, [9]
, [10]
, [11]
, [12]
, [13]
, [14]
, [15]
, [16]
, [17]
, [18]
, [19]
, [20]
, [21]
)
) P;
我将完整的结果集推送到一个名为rsResults
的类型为Object的SSIS变量。
在我的Foreach循环容器中,我将变量Col00
,Col01
和Col19
映射到顺序位置0,1和19
如果您拥有Visual Studio的免费插件BIDS Helper,只需点击几下即可重新创建我的解决方案。 Biml是商业智能标记语言,将其视为BI的操作系统。在这里,我们将使用一些XML来描述我们想要的SSIS包。
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<!-- UPDATE ME -->
<OleDbConnection Name="CM_OLE" ConnectionString="Data Source=localhost\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;" />
</Connections>
<Packages>
<Package ConstraintMode="Linear" Name="so_29220275">
<Variables>
<Variable DataType="Object" Name="rsResults" />
<Variable DataType="Int32" Name="Col00">-1</Variable>
<Variable DataType="Int32" Name="Col01">-1</Variable>
<Variable DataType="Int32" Name="Col19">-1</Variable>
<Variable DataType="String" Name="QuerySource"><![CDATA[SELECT
*
FROM
(
SELECT TOP 21
CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS int) AS rn
FROM
sys.all_columns AS AC
) D
PIVOT
(
max(rn)
FOR rn IN ([1]
, [2]
, [3]
, [4]
, [5]
, [6]
, [7]
, [8]
, [9]
, [10]
, [11]
, [12]
, [13]
, [14]
, [15]
, [16]
, [17]
, [18]
, [19]
, [20]
, [21]
)
) P;
]]></Variable>
</Variables>
<Tasks>
<ExecuteSQL ConnectionName="CM_OLE" Name="SQL - gen data" ResultSet="Full">
<VariableInput VariableName="User.QuerySource" />
<Results>
<Result VariableName="User.rsResults" Name="0"></Result>
</Results>
</ExecuteSQL>
<ForEachAdoLoop SourceVariableName="User.rsResults" ConstraintMode="Linear" Name="FELC 3 of 20">
<VariableMappings>
<VariableMapping VariableName="User.Col00" Name="0" />
<VariableMapping VariableName="User.Col01" Name="1" />
<VariableMapping VariableName="User.Col19" Name="19" />
</VariableMappings>
<Tasks>
<ExecuteSQL ConnectionName="CM_OLE" Name="SQL - do nothing">
<DirectInput>SELECT 1;</DirectInput>
</ExecuteSQL>
</Tasks>
</ForEachAdoLoop>
</Tasks>
</Package>
</Packages>
</Biml>