本文介紹了OLE DB目標(biāo):CAST規(guī)范的字符值無(wú)效的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我的表源:
編號(hào)_制作 | 類型 | 活動(dòng) | 日期 |
---|---|---|---|
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 |
列數(shù)據(jù)類型為:
列 | 數(shù)據(jù)類型 |
---|---|
類型 | tinyint |
活動(dòng) | tinyint |
日期 | 日期時(shí)間 |
我正在使用SSIS加載我的目標(biāo)表。
因此,我要將TYPE
更改為
Normal
if 1
Divers
if 2
Intra-Société
if 3
Prospect
IF 4
另請(qǐng)將actif
更改為:
no
If 1
yes
if 2
另外,從日期獲取資歷
因此,我創(chuàng)建了一個(gè)具有3列的派生列轉(zhuǎn)換,如下所示:
類型列
TYPE == 1 ? "Normal" : TYPE == 2 ? "Divers" : TYPE == 3 ? "Intra-Société" : TYPE == 4 ? "Prospect" : ""
活動(dòng)列
actif == 1 ? "No" : actif == 2 ? "yes" : ""
日期列
DATEDIFF("YY",date,GETDATE())
所有這些轉(zhuǎn)換都不起作用。
[OLE DB Destination[288]]錯(cuò)誤:SSIS錯(cuò)誤代碼DTS_E_OLEDBERROR。發(fā)生OLE DB錯(cuò)誤。錯(cuò)誤代碼:0x80004005。
OLE DB記錄可用。來(lái)源:Microsoft SQL Server Native Client 11.0&HResult:0x80004005描述:&Quot;CAST規(guī)范的字符值無(wú)效&Quot;。
OLE DB記錄可用。來(lái)源:Microsoft SQL Server Native Client 11.0&HResult:0x80004005說(shuō)明:";CAST規(guī)范的字符值無(wú)效。
[OLE DB Destination[288]]錯(cuò)誤:OLE DB Destination.Inports[OLE DB Destination Input].在OLE DB Destination.Inports[OLE DB Destination Input]上的[Deriated Column Actif]列。返回的列狀態(tài)為:無(wú)法轉(zhuǎn)換值,因?yàn)榭赡軙?huì)丟失數(shù)據(jù)。。
推薦答案
主要異常為:
轉(zhuǎn)換規(guī)范的字符值無(wú)效。
無(wú)法轉(zhuǎn)換值,因?yàn)榭赡軙?huì)丟失數(shù)據(jù)。
檢查目標(biāo)SQL表列數(shù)據(jù)類型和目標(biāo)上的列映射。
如問(wèn)題中提供的錯(cuò)誤描述所示,它是由OLE DB目標(biāo)組件引發(fā)的。這意味著派生列轉(zhuǎn)換工作正常。
我建議閱讀下面的文章,以了解更多關(guān)于SSIS數(shù)據(jù)類型、數(shù)據(jù)轉(zhuǎn)換轉(zhuǎn)換、隱式和顯式轉(zhuǎn)換的知識(shí):
SSIS Data types: Change from the Advanced Editor vs. Data Conversion Transformations
假設(shè)數(shù)據(jù)類型不匹配是由派生列生成的值引起的。在這種情況下,您可以嘗試使用強(qiáng)制轉(zhuǎn)換運(yùn)算符或數(shù)據(jù)轉(zhuǎn)換轉(zhuǎn)換來(lái)解決沖突。
此外,您應(yīng)該知道派生列轉(zhuǎn)換輸出的類型是DT_WTR
或DT_STR
,因此它們應(yīng)該映射到目標(biāo)表中的VARCHAR
或NVARCHAR
列。
更新1
基于我們對(duì)您相關(guān)問(wèn)題的討論:Derived Column to handled mulitple conditions in CASE statement?。您似乎正在嘗試在tinyint
列中插入字符串值,因?yàn)槟趪L試將類型代碼替換為等效的字符串值,并將其重新插入到SQL表中。
您不應(yīng)編輯您的數(shù)據(jù),因?yàn)樗O(shè)計(jì)和存儲(chǔ)得很好。您應(yīng)該創(chuàng)建另一個(gè)表(例如:TypeReference(ID tinyint,DESCRIPTION VARCHAR(50))并存儲(chǔ)您在CASE語(yǔ)句中使用的所有字符串值。然后,一旦需要檢索字符串值,您就應(yīng)該聯(lián)接這兩個(gè)表。
例如:
SELECT myTable.*, TypeReference.Description
FROM myTable LEFT JOIN TypeReference
ON myTable.Type = TypeReference.Id
此外,如果創(chuàng)建SSIS包僅用于檢索這些值,則不需要?jiǎng)?chuàng)建此包。
這篇關(guān)于OLE DB目標(biāo):CAST規(guī)范的字符值無(wú)效的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,