'*' 导致 SSIS 错误
'*' Causing SSIS Errors
当我使用 SSIS 将数据从一个 table 传输到另一个时,它给我一个错误,我认为这是因为某些字段有一个 *。无论如何我可以从所有字段中删除它吗?无法判断它将出现在哪个字段或列中,因为它是某种脚注的指示。
错误:
OLE DB Destination [40]] Error: SSIS Error Code DTS_E_OLEDBERROR. An
OLE DB error has occurred. Error code: 0x80004005. An OLE DB record is
available. Source: "Microsoft SQL Server Native Client 11.0" Hresult:
0x80004005 Description: "Invalid character value for cast
specification".
感谢您的帮助。
干杯
您可以使用 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
所以我最终对每个包含“”的字段使用了 Case 语句。因此,每次它找到“”时,它都会用 Null 替换该字段,因为“*”将该字段标识为未完全计算的字段。这样做可以让我的 SSIS 包无误地执行。
当我使用 SSIS 将数据从一个 table 传输到另一个时,它给我一个错误,我认为这是因为某些字段有一个 *。无论如何我可以从所有字段中删除它吗?无法判断它将出现在哪个字段或列中,因为它是某种脚注的指示。
错误:
OLE DB Destination [40]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005. An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "Invalid character value for cast specification".
感谢您的帮助。
干杯
您可以使用 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
所以我最终对每个包含“”的字段使用了 Case 语句。因此,每次它找到“”时,它都会用 Null 替换该字段,因为“*”将该字段标识为未完全计算的字段。这样做可以让我的 SSIS 包无误地执行。