OLE DB 目标:转换规范的无效字符值

OLE DB Destination: Invalid character value for cast specification

我的table来源:

num_facture TYPE actif date
1 1 1 2010-01-31 00:00:00.000
2 2 1 2011-01-31 00:00:00.000
3 3 2 2012-01-31 00:00:00.000
4 4 2 2013-01-31 00:00:00.000

列数据类型为:

Column Data Type
TYPE tinyint
Actif tinyint
date datetime

我正在使用 SSIS 加载我的目的地 table。

因此,我想将 TYPE 更改为

此外,将 actif 更改为:

此外,从日期中获取资历

因此,我创建了一个包含 3 列的派生列转换,如下所示:

类型列

TYPE == 1 ? "Normal" : TYPE == 2 ? "Divers" : TYPE == 3 ? "Intra-Société" : TYPE == 4 ? "Prospect" : ""

活动列

actif == 1 ? "No" : actif == 2 ? "yes" : ""

日期列

DATEDIFF("YY",date,GETDATE())

所有这些转换都不起作用。

[OLE DB Destination [288]] 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". An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "Invalid character value for cast specification".

[OLE DB Destination [288]] Error: There was an error with OLE DB Destination.Inputs[OLE DB Destination Input].Columns[Derived Column actif] on OLE DB Destination.Inputs[OLE DB Destination Input]. The column status returned was: "The value could not be converted because of a potential loss of data.".

主要的例外是:

Invalid character value for cast specification.

The value could not be converted because of a potential loss of data.

检查目标 SQL table 列数据类型和目标上的列映射。

正如问题中提供的错误描述所示,它是由 OLE DB Destination 组件抛出的。这意味着派生列转换工作正常。

建议阅读以下文章,了解更多SSIS数据类型、数据转换转换、隐式与显式转换:

假设数据类型不匹配是由派生列生成的值引起的。在这种情况下,您可以尝试使用转换运算符或数据转换转换来解决冲突。

此外,您应该知道派生列转换输出的类型是 DT_WTRDT_STR,因此它们应该映射到 VARCHARNVARCHAR目标中的列 table.


更新 1

基于我们对您的相关问题的讨论:。看起来您正试图在 tinyint 列中插入一个字符串值,因为您正试图用等效的字符串值替换类型代码并将其重新插入到 SQL table.

您不应编辑您的数据,因为它经过精心设计和存储。您应该创建另一个 table (例如:TypeReference(Id tinyint, Description VARCHAR(50)) 并存储您在 CASE 语句中使用的所有字符串值。然后您一旦您需要检索字符串值,应该加入两个 tables。

例如:

SELECT myTable.*, TypeReference.Description 
FROM myTable LEFT JOIN TypeReference 
     ON myTable.Type = TypeReference.Id

此外,如果创建 SSIS 包只是为了检索这些值,则无需创建此包。