本文介紹了OLE DB目標:CAST規范的字符值無效的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我的表源:
編號_制作 | 類型 | 活動 | 日期 |
---|---|---|---|
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 1
Divers
if 2
Intra-Société
if 3
Prospect
IF 4
另請將actif
更改為:
no
If 1
yes
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規范的字符值無效的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,