1

我有一个 SSIS 包,它将平面文件中的数据输入到 SQL 2008 数据库表中。第 3 方每天生成平面文件 (.csv)。我需要删除的每个字段中都有前导空格。

我认为脚本组件可以解决问题?

我想让它遍历所有输入列和 LTrim(RTrim) 每一列的所有值。

我在这里找到了这段代码:http ://microsoft-ssis.blogspot.com/2010/12/do-something-for-all-columns-in-your.html

但是,我不知道如何将其更改为修剪值?

我尝试将“ValueOfProperty.ToUpper () ”更改为“ValueOfProperty.Trim () ”,但随后它导致组件“错误 30203:预期标识符...”出现错误

请帮忙??

这是我的 SSIS 数据流:

平面文件 > 数据转换 > 脚本组件 > OLE DB 目标

数据流

    ' This script adjusts the value of all string fields
Imports System
Imports System.Data
Imports System.Math
Imports System.Reflection ' Added
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

<microsoft .sqlserver.dts.pipeline.ssisscriptcomponententrypointattribute=".sqlserver.dts.pipeline.ssisscriptcomponententrypointattribute"> _
<clscompliant false="false"> _

Public Class ScriptMain
Inherits UserComponent

' Method that will be started for each record in you dataflow 
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    ' Use Reflection to loop through all the properties of Row:
    ' Example:
    ' Row.Field1            (String)
    ' Row.Field1_IsNull     (Boolean)
    ' Row.Field2            (String)
    ' Row.Field2_IsNull     (Boolean)
    Dim p As PropertyInfo
    For Each p In Row.GetType().GetProperties()
        ' Do something for all string properties: Row.Field1, Row.Field2, etc.
        If p.PropertyType Is GetType(String) Then
            ' Use a method to set the value of each String type property
            ' Make sure the length of the new value doesn't exceed the column size
            p.SetValue(Row, DoSomething(p.GetValue(Row, Nothing).ToString()), Nothing)
        End If
    Next
End Sub

' New function that you can adjust to suit your needs
Public Function DoSomething(ByVal ValueOfProperty As String) As String
    ' Uppercase the value
    ValueOfProperty = ValueOfProperty.ToUpper() 'Maybe change this to Trim()?
    Return ValueOfProperty
End Function

End Class
4

2 回答 2

2

我认为您可以通过数据转换任务而不是 SSIS 中的脚本任务来实现这一点。我认为这可能更简单,您可以简单地在每列上应用一个表达式来修剪,或者在您的集合中添加一个新列并替换您的旧列,或者更新同一列返回的值,然后由您的下一个数据使用流任务。

我个人认为在 GUI 拖放中这样做会更好一些,在这种情况下您根本不必考虑脚本任务!只有要使用的表达式,我在上面链接了一些 MSDN 文档。然后,您可以根据平面文件数据源中的每一列显式设置它。

MSDN 上的修剪文档: https ://msdn.microsoft.com/en-us/library/ms139947.aspx

不要在这台家用机器上安装 SSDT 或 VSBI,否则我会设置一个简单的数据流示例并截屏。

关于 SSIS 中的 Trim 的另一篇看似有用的文章:http ://www.bradleyschacht.com/trim-functions-in-ssis/

于 2016-04-19T01:14:18.623 回答
1
于 2016-04-19T19:58:33.967 回答