2013-08-15 2 views
0

SQL Server 2008 R2에서 패키지를 개발했습니다. 스크립트 블록을 사용하여 데이터를 변환하고 싶습니다. 하지만 첫 번째 및 마지막 레코드가 삽입되지 않은 오류가 발생하고 무결성 제한을 위반하는 null을 삽입하려고합니다. 아래 VB 스크립트에서 내 코드입니다.문제 : 루프 스크립트 구성 요소의 SSIS 패키지 데이터 변환

<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 개의 행을 삽입하려하지만 오류가 발생합니다. 나를 안내 해줘.

+0

스크립트 구성 요소에서 가져 오는 오류를 게시 할 수 있습니까? 코드를 살펴보면 Sub Input0_ProcessInputRow에서 행 출력을 처리하므로 새 행을 만들지 않거나 만들려하지 않으므로 Sub CreateNewOutputRows()를 재정의 할 필요가 없습니다. 이것이 귀하가 성실성을 침해당하는 이유이기도합니다. – jymbo

답변

1

변수 i = 0을 초기화 한 다음 해당 행을 처리하기 전에 변수를 증가시킵니다. 입력 내용의 첫 번째 행을 건너 뛸 수 있습니다.

관련 문제