在SSIS项目中,我尝试过滤掉Excel文件源中的行,其中列的值以字母开头,后跟数字。一些单元格包含多个值,而不是所有单元格都遵循数据类型格式。数据流程目前如下:
Excel Source > Data Conversion > OLE DB Destination
我在Excel Source之后添加了条件性拆分,但我对如何过滤掉不需要的记录感到困扰。以下是在数据流结束之前不应包含的值的示例:
Row Value
1 1234
2 P123
3 P1234, P456
4 rec P678
第1行应该是唯一应该流向目的地的行。有没有办法过滤掉以“P”开头并后跟数字的记录,无论每个单元格中有多少个值?
更新:我目前正在研究FINDSTRING(价值,“P”,1)> 0 || FINDSTRING(值,“p”,1)> 0.输出阻止第2-4行,但第1行的值更改为0.有人知道为什么会这样吗?
答案 0 :(得分:1)
脚本组件,使用.Net方法检查值是否为数字。
1)脚本组件 添加脚本组件(类型:转换),您需要在其中进行检查。
2)选择输入列 添加需要作为输入列检查的列。
3)添加输出列 在“输入和输出”选项卡上的“输出”列中添加新列。类型拍摄是布尔值并给它一个合适的名称。
4)剧本
' VB.Net代码 '检查字符串值是否包含数字 进口系统 导入System.Data 进口System.Math 导入Microsoft.SqlServer.Dts.Pipeline.Wrapper 导入Microsoft.SqlServer.Dts.Runtime.Wrapper
Public Class ScriptMain
Inherits UserComponent
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
' Standard VB.net method, indicating whether
' an expression can be evaluated as a number
If (IsNumeric(Row.InputCol)) Then
Row.IsNumeric = True
Else
Row.IsNumeric = False
End If
End Sub
End Class
5)创建条件拆分以过滤行
派生列
1)添加派生列 添加派生列,您需要在其中进行检查。
2)添加表达式
使用以下表达式添加新列,并为其指定合适的名称:!ISNULL((DT_I8)TextNumbers)
。所有数字都将为True,所有非数字都会引发错误。
3)忽略错误 转到Derived列中的Configure Error Output窗口,忽略新字段的错误。
4)结果
使用ISNULL
表达式
数据转换
1)使用数据转换
第二种解决方案的替代方法是尝试通过数据转换转换将值转换为int,并忽略任何错误。然后使用ISNULL
表达式
答案 1 :(得分:0)
您要检查的条件查看字段是否为数字。不幸的是,我们在SSIS中没有直接的ISNUMERIC功能。
请通过以下链接。我们可以使用派生列来实现这一目标。
Check IsNumeric() with Derived Column Transform in SSIS Package