Sql 问题:SSIS包循环脚本组件中的数据转换
我已经在SQLServer2008R2中开发了一个包。我想使用脚本块转换数据。但我得到的错误是,第一个和最后一个记录没有插入,它试图插入违反完整性约束的null。下面是我用VB脚本编写的代码Sql 问题:SSIS包循环脚本组件中的数据转换,sql,sql-server-2008-r2,ssis,dts,Sql,Sql Server 2008 R2,Ssis,Dts,我已经在SQLServer2008R2中开发了一个包。我想使用脚本块转换数据。但我得到的错误是,第一个和最后一个记录没有插入,它试图插入违反完整性约束的null。下面是我用VB脚本编写的代码 <microsoft.sqlserver.dts.pipeline.ssisscriptcomponententrypointattribute()> _ <clscompliant(false)> _ Public Class ScriptMain
<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
_
_
公共类ScriptMain
继承用户组件
尺寸i为整数=0
公共覆盖子预执行()
MyBase.PreExecute()
端接头
公共重写子PostExecute()
MyBase.PostExecute()
端接头
公共覆盖子Input0\u进程InputRow(ByVal行作为Input0Buffer)
i=i+1
带Output0Buffer
.OrderHeaderID=i
.CustomerNumber=行.CUSTNO
.OrderNumber=行.ORDER
.TermsCode=Row.TRMSCD
.TermsDescription=Row.TRMDSC
.totalines=行。总计
.TotalDollars=Row.TOTDOL
.ComCls=行.ComCls
.DropShip=Row.DRPSHP
.DropshipPurchaseOrder=行.DSPONO
.InvoiceNumber=行。INVNO
.LstSeq=行.LstSeq
.OrderType=Row.ORDTYP
.PONumber=行.PONUMB
.ProgramCode=Row.PROGCD
.programdal=Row.PROGDL
.ProgramName=Row.PRGNAM
.PRONumber=Row.PRONUM
.ReceivedVia=行.RCVVIA
.StatusMessage=Row.STAMSG
.TermsDescription=Row.TRMDES
.TermsDiscount=Row.TRMDSC
.TruckName=Row.TRKNAM
如果是IsDate(第SHPDAT行),则
.ShipDate=行.SHPDAT
如果结束
如果是IsDate(行ORDDAT),则
.OrderDate=行.orderDat
如果结束
如果是IsDate(第INVDAT行),则
.InvoiceDate=行.INVDAT
如果结束
如果是IsDate(行日期),则
.约会
如果结束
如果不是Row.INVDAT\u为空,则
.AddRow()
其他的
出口接头
如果结束
以
端接头
公共覆盖子CreateNewOutputRows()
Output0Buffer.AddRow()
端接头
末级
目前,我试图插入10行,但它给出了错误。请指导我。初始化变量i=0,然后在处理该行之前递增它。这可能会导致跳过输入中的第一行。能否发布从脚本组件中得到的错误?通过查看代码,您可以在Sub-Input0\u ProcessInputRow中处理行输出,因此您可能不需要重写Sub-CreateNewOutputRows(),因为您没有创建(或打算创建)任何新行。这可能也是您受到完整性侵犯的原因。