当我使用SSIS将数据从一个表传输到另一个表时,它会给我一个错误,我认为这是因为某些字段有*。无论如何我可以从所有领域删除它吗?没有办法告诉它会出现在哪个字段或列中,因为它是某种脚注的指示。
错误:
OLE DB目标[40]]错误:SSIS错误代码DTS_E_OLEDBERROR。一个 发生OLE DB错误。错误代码:0x80004005。 OLE DB记录是 可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult: 0x80004005描述:“强制转换的字符值无效 说明书中,”
感谢您的帮助。
干杯
答案 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包执行没有错误。