如何跳过 SSIS 数据流中的最后一行
How to skip last row in the SSIS data flow
我在我的数据流中使用 FlatFile Source Manager
--> Script COmponent as Trans
--> OLEDB destination
。
源从平面文件中读取所有行,我想跳过更新数据库的最后一行(预告片记录)。
因为它包含 NULL
值,数据库会抛出错误。
请帮助我如何解决这个问题。
此致,
VHK
如果您的要求是避免平面文件中的行具有空值,那么您可以采用以下方法,
- 使用源组件从平面文件中读取数据。
- 使用
Conditional Split
组件,并在case expression
中提供为!ISNULL(Column1) && !ISNULL(Column2)
(Column1和Column2可以随心所欲。如果您的平面文件有一个名为ID
并且它除了最后一行没有空值,那么你可以使用 as !ISNULL(ID)
).
- 将案例输出映射到 OLEDB 目标。
希望对您有所帮助。
要忽略最后一行,您必须执行以下步骤:
- 添加一个
DataFlow Task
(我们命名为DFT RowCount
)
- 添加类型为
System.Int32
(名称:User::RowCount) 的全局变量
- 在这个DataFlow Task中添加一个
Flat File Source
(你要导入的文件)
- 在
Flat File Source
旁边添加一个 RowCount
组件
- 将
RowCount
结果映射到变量 User::RowCount
- 再添加一个
DataFlow Task
(我们命名为DFT Import
)
- 在
DFT Import
中添加Flat File Source
(需要导入的文件)
- 在
Flat File Source
旁边添加一个 Script Component
- 向脚本添加
User::RowCount
变量 只读变量
- 添加类型为
DT_BOOL
的输出列(名称:IsLastRow
)
在脚本Window中写入如下脚本
Dim intRowCount As Integer = 0
Dim intCurrentRow As Integer = 0
Public Overrides Sub PreExecute()
MyBase.PreExecute()
intRowCount = Variables.RowCount
End Sub
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
intCurrentRow += 1
If intCurrentRow = intRowCount Then
Row.IsLastRow = True
Else
Row.IsLastRow = False
End If
End Sub
在脚本组件旁边添加一个Conditional Split
使用以下表达式拆分行
[IsLastRow] == False
- 在有条件的 Split
旁边添加 OLEDB Destination
旁注:如果您想忽略另一种情况(不是最后一行)的行,只需更改脚本组件中编写的脚本即可满足您的要求
我在我的数据流中使用 FlatFile Source Manager
--> Script COmponent as Trans
--> OLEDB destination
。
源从平面文件中读取所有行,我想跳过更新数据库的最后一行(预告片记录)。
因为它包含 NULL
值,数据库会抛出错误。
请帮助我如何解决这个问题。
此致, VHK
如果您的要求是避免平面文件中的行具有空值,那么您可以采用以下方法,
- 使用源组件从平面文件中读取数据。
- 使用
Conditional Split
组件,并在case expression
中提供为!ISNULL(Column1) && !ISNULL(Column2)
(Column1和Column2可以随心所欲。如果您的平面文件有一个名为ID
并且它除了最后一行没有空值,那么你可以使用 as!ISNULL(ID)
). - 将案例输出映射到 OLEDB 目标。
希望对您有所帮助。
要忽略最后一行,您必须执行以下步骤:
- 添加一个
DataFlow Task
(我们命名为DFT RowCount
) - 添加类型为
System.Int32
(名称:User::RowCount) 的全局变量
- 在这个DataFlow Task中添加一个
Flat File Source
(你要导入的文件) - 在
Flat File Source
旁边添加一个 - 将
RowCount
结果映射到变量User::RowCount
RowCount
组件
- 再添加一个
DataFlow Task
(我们命名为DFT Import
)
- 在
DFT Import
中添加Flat File Source
(需要导入的文件) - 在
Flat File Source
旁边添加一个 - 向脚本添加
User::RowCount
变量 只读变量
Script Component
- 添加类型为
DT_BOOL
的输出列(名称:IsLastRow
)
在脚本Window中写入如下脚本
Dim intRowCount As Integer = 0 Dim intCurrentRow As Integer = 0 Public Overrides Sub PreExecute() MyBase.PreExecute() intRowCount = Variables.RowCount End Sub Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) intCurrentRow += 1 If intCurrentRow = intRowCount Then Row.IsLastRow = True Else Row.IsLastRow = False End If End Sub
在脚本组件旁边添加一个
Conditional Split
使用以下表达式拆分行
[IsLastRow] == False
- 在有条件的 Split 旁边添加
OLEDB Destination
旁注:如果您想忽略另一种情况(不是最后一行)的行,只需更改脚本组件中编写的脚本即可满足您的要求