【问题标题】:Issue :SSIS Package data transformation in loop script component问题:循环脚本组件中的 SSIS 包数据转换
【发布时间】:2013-08-15 08:04:29
【问题描述】:

我在 SQL Server 2008 R2 中开发了一个包。我想使用脚本块转换数据。但我得到的错误是第一个和最后一个记录没有插入,它试图插入违反完整性约束的空值。下面是我在 VB 脚本中的代码。

    <microsoft.sqlserver.dts.pipeline.ssisscriptcomponententrypointattribute()> _
    <clscompliant(false)> _

    Public Class ScriptMain
    Inherits UserComponent
    Dim i As Integer = 0

    Public Overrides Sub PreExecute()
        MyBase.PreExecute()        
    End Sub

    Public Overrides Sub PostExecute()
        MyBase.PostExecute()        
    End Sub
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

            i = i + 1
            With Output0Buffer
                .OrderHeaderID = i
                .CustomerNumber = Row.CUSTNO
                .OrderNumber = Row.ORDER
                .TermsCode = Row.TRMSCD
                .TermsDescription = Row.TRMDSC
                .TotalLines = Row.TOTLNS
                .TotalDollars = Row.TOTDOL
                .ComCls = Row.COMCLS
                .DropShip = Row.DRPSHP
                .DropshipPurchaseOrder = Row.DSPONO
                .InvoiceNumber = Row.INVNO
                .LstSeq = Row.LSTSEQ
                .OrderType = Row.ORDTYP
                .PONumber = Row.PONUMB
                .ProgramCode = Row.PROGCD
                .ProgramDeal = Row.PROGDL
                .ProgramName = Row.PRGNAM
                .PRONumber = Row.PRONUM
                .ReceivedVia = Row.RCVVIA
                .StatusMessage = Row.STAMSG
                .TermsDescription = Row.TRMDES
                .TermsDiscount = Row.TRMDSC
                .TruckName = Row.TRKNAM

                If IsDate(Row.SHPDAT) Then
                    .ShipDate = Row.SHPDAT
                End If

                If IsDate(Row.ORDDAT) Then
                    .OrderDate = Row.ORDDAT
                End If

                If IsDate(Row.INVDAT) Then
                    .InvoiceDate = Row.INVDAT
                End If

                If IsDate(Row.DATING) Then
                    .Dating = Row.DATING
                End If

                If Not Row.INVDAT_IsNull Then
                    .AddRow()
                Else
                    Exit Sub
                End If
            End With

    End Sub

    Public Overrides Sub CreateNewOutputRows()

        Output0Buffer.AddRow()

    End Sub
End Class

目前我正在尝试插入 10 行,但它给出了错误。请指导我。

【问题讨论】:

  • 你能发布你从脚本组件得到的错误吗?通过查看您的代码,您可以处理 Sub Input0_ProcessInputRow 中的行输出,因此您可能不需要覆盖 Sub CreateNewOutputRows(),因为您没有创建(或打算创建)任何新行。这也可能是您遇到完整性违规的原因。

标签: sql sql-server-2008-r2 ssis dts


【解决方案1】:

您初始化变量 i = 0,然后在处理该行之前将其递增。这可能会导致您输入的第一行被跳过。

【讨论】:

    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2019-08-15
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多