'*'导致SSIS错误

时间:2016-02-09 18:01:32

标签: sql ssis

当我使用SSIS将数据从一个表传输到另一个表时,它会给我一个错误,我认为这是因为某些字段有*。无论如何我可以从所有领域删除它吗?没有办法告诉它会出现在哪个字段或列中,因为它是某种脚注的指示。

错误:

  

OLE DB目标[40]]错误:SSIS错误代码DTS_E_OLEDBERROR。一个   发生OLE DB错误。错误代码:0x80004005。 OLE DB记录是   可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:   0x80004005描述:“强制转换的字符值无效   说明书中,”

感谢您的帮助。

干杯

2 个答案:

答案 0 :(得分:0)

您可以使用TSQL和SSIS以多种方式解决从分数列中删除非数字字符的问题

使用下面的代码只需将下面的tsql中的字段分数替换为包含查询分数的列。

SELECT
     (SELECT CAST(CAST((
        SELECT SUBSTRING(score, Number, 1)
        FROM master..spt_values
        WHERE Type='p' AND Number <= LEN(' ') AND
            SUBSTRING(score, Number, 1) LIKE '[0-9]' FOR XML Path(''))
    AS xml) AS varchar(MAX)))

使用SSIS脚本转换任务的第二个解决方案您可以使用VB或C#来使用正则表达式函数来去除非数字字符,下面的示例使用VB,只需将Row.ColumName更改为包含数据流中得分的字段。

Imports System.Text.RegularExpressions

Public Overrides Sub Input()_ProcessInputRows(ByVal Row As Input()Buffer)

     If Row.ColumnName_IsNull = False Or Row.ColumnName = "" Then

           Dim pattern As String = String.Empty

           Dim r As Regex = Nothing

           pattern = "[^0-9]"

           r = New Regex(pattern, RegexOptions.Compiled)

           Row.ColumnName = Regex.Replace(Row.ColumnName, pattern, "")

      End If

End Sub

答案 1 :(得分:0)

所以我最终使用包含''的每个字段的Case语句。因此,每当它找到''时,它将用Null替换该字段,因为'*'将该字段标识为未完全计算的字段。这样做允许我的SSIS包执行没有错误。