问题描述
我的表源:
编号_制作 | 类型 | 活动 | 日期 |
---|---|---|---|
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 |
列数据类型为:
列 | 数据类型 |
---|---|
类型 | tinyint |
活动 | tinyint |
日期 | 日期时间 |
我正在使用SSIS加载我的目标表。
因此,我要将TYPE
更改为
Normal
if 1Divers
if 2Intra-Société
if 3Prospect
IF 4
另请将actif
更改为:
no
If 1yes
if 2
另外,从日期获取资历
因此,我创建了一个具有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]]错误:SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80004005。 OLE DB记录可用。来源:Microsoft SQL Server Native Client 11.0&HResult:0x80004005描述:&Quot;CAST规范的字符值无效&Quot;。 OLE DB记录可用。来源:Microsoft SQL Server Native Client 11.0&HResult:0x80004005说明:";CAST规范的字符值无效。
[OLE DB Destination[288]]错误:OLE DB Destination.Inports[OLE DB Destination Input].在OLE DB Destination.Inports[OLE DB Destination Input]上的[Deriated Column Actif]列。返回的列状态为:无法转换值,因为可能会丢失数据。。
推荐答案
主要异常为:
转换规范的字符值无效。
无法转换值,因为可能会丢失数据。
检查目标SQL表列数据类型和目标上的列映射。
如问题中提供的错误描述所示,它是由OLE DB目标组件引发的。这意味着派生列转换工作正常。
我建议阅读下面的文章,以了解更多关于SSIS数据类型、数据转换转换、隐式和显式转换的知识:
- SSIS Data types: Change from the Advanced Editor vs. Data Conversion Transformations
此外,您应该知道派生列转换输出的类型是DT_WTR
或DT_STR
,因此它们应该映射到目标表中的VARCHAR
或NVARCHAR
列。
更新1
基于我们对您相关问题的讨论:Derived Column to handled mulitple conditions in CASE statement?。您似乎正在尝试在tinyint
列中插入字符串值,因为您正在尝试将类型代码替换为等效的字符串值,并将其重新插入到SQL表中。
您不应编辑您的数据,因为它设计和存储得很好。您应该创建另一个表(例如:TypeReference(ID tinyint,DESCRIPTION VARCHAR(50))并存储您在CASE语句中使用的所有字符串值。然后,一旦需要检索字符串值,您就应该联接这两个表。
例如:
SELECT myTable.*, TypeReference.Description
FROM myTable LEFT JOIN TypeReference
ON myTable.Type = TypeReference.Id
此外,如果创建SSIS包仅用于检索这些值,则不需要创建此包。
这篇关于OLE DB目标:CAST规范的字符值无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!