有一個平面文件,日期格式爲YYYYMMDD
格式。 19990131
。我正在用平面文件源閱讀它,列有默認設置(DT_STR
,寬度50
)...當我嘗試通過OLE DB目的地插入數據到帶有日期列的表中時我得到錯誤:「值不能是由於潛在的數據丟失而被轉換。「SSIS,YYYYMMDD日期格式,從平面文件到SQLServer 2008R2表(OLE DB目標)
它的原因是什麼? SQLServer很容易理解YYYYMMDD格式...
有一個平面文件,日期格式爲YYYYMMDD
格式。 19990131
。我正在用平面文件源閱讀它,列有默認設置(DT_STR
,寬度50
)...當我嘗試通過OLE DB目的地插入數據到帶有日期列的表中時我得到錯誤:「值不能是由於潛在的數據丟失而被轉換。「SSIS,YYYYMMDD日期格式,從平面文件到SQLServer 2008R2表(OLE DB目標)
它的原因是什麼? SQLServer很容易理解YYYYMMDD格式...
SQL Server可能會理解它,但SSIS不會。注意此評論從SSIS documentation:
When a string is cast to a DT_DATE, or vice versa, the locale of the transformation is used. However, the date is in the ISO format of YYYY-MM-DD, regardless of whether the locale preference uses the ISO format.
SSIS試圖基於平面文件連接器的語言環境,這可能對某些地區工作,但顯然不是爲你解讀YYYYMMDD
。正如您發現的那樣,將其更改爲YYYY-MM-DD
的作品,因爲SSIS認爲該格式是明確的(當然,您也可以更改平面文件連接器的區域設置,儘管這可能會影響其他數據)。
不幸的是,這種行爲在SQL Server本身中是完全相反的,至少對於datetime
data type:YYYYMMDD
是明確的,並且YYYY-MM-DD
是不明確的。另一方面,對於較新的date
data type,YYYYMMDD
和YYYY-MM-DD
在SQL Server中是明確的。
如果我將YYYYMMDD
更改爲YYYY-MM-DD
將數據放入表之前一切正常。如果沒有人提供另一個更好的解決方案,我會接受這個答案。也許我的是容易出現本地化錯誤?
正是我想看到的那種解釋(SSIS和SQL Server之間的區別令人困惑)。謝謝! – user1068352