2016-08-30 128 views
-1

我有一些從SQL Server獲取的Excel數據,但是我更新了SQL Server的腳本,因此我需要再次將Excel導入到SQL Server中。我用任務 - 導入數據將Excel文件導入到SQL Server中 - 數據類型有問題

有一些錯誤:

複製到[DBO] [AA](錯誤)消息。錯誤0xc0202009:數據流 任務1:SSIS錯誤代碼DTS_E_OLEDBERROR。發生OLE DB錯誤 。錯誤代碼:0x80004005。 OLE DB記錄可用。 源:「Microsoft SQL Server Native Client 11.0」Hresult:0x80004005 描述:「無效的日期格式」。 (SQL Server導入和導出嚮導 )

錯誤0xc020901c:數據流任務1:有與 目的地的錯誤 - AA.Inputs [目的地輸入] .Columns [時間]上 目的地 - AA.Inputs [目的地輸入。列狀態返回 是:「轉換失敗,因爲數據值溢出了 指定的類型」。 (SQL Server導入和導出嚮導)

錯誤0xc0209029:數據流任務1:SSIS錯誤代碼 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 「目標 - AA.Inputs [目標輸入]」失敗,因爲發生了錯誤代碼0xC020907A ,並且「目標 - AA.Inputs [目標輸入]」上的錯誤行處置指定錯誤失敗。在指定組件的指定對象上發生了錯誤 。有 可能是此之前發佈的錯誤消息與關於 失敗的更多信息。 (SQL Server導入和導出嚮導)

錯誤0xc0047022:數據流任務1:SSIS錯誤代碼 DTS_E_PROCESSINPUTFAILED。組件 「Destination-AA」(107)上的ProcessInput方法失敗,錯誤代碼爲0xC0209029,而 處理輸入「Destination Input」(120)。已識別的組件 從ProcessInput方法返回錯誤。該錯誤對組件而言是特定的 ,但該錯誤是致命的,並且會導致數據流 任務停止運行。在此 之前可能會發布錯誤消息,並提供有關失敗的更多信息。 (SQL Server導入和 導出嚮導)

我不知道是否有人有任何建議。

由於Excel文件只有有限的數據類型,即數字是浮點型。有很多數據類型與目標SQL Server表不匹配。

+0

如果您包含要導入的數據的樣本,顯示您在導入嚮導中使用的設置,並說明您嘗試解決單個錯誤的方法,那麼您更有可能獲得幫助。您是否確定哪些數據是有問題的?也許嘗試導入幾行並處理這些行的特定錯誤。 – SMM

回答

1

對於高性能和控制數據類型轉換:

1)保存Excel來使用保存爲CSV文本文件。

2)使用下面的腳本導入數據:

BULK 
INSERT mytable 
FROM 'path_to_csdv_file.csv' 
WITH 
(
    FIELDTERMINATOR = ';', 
    ROWTERMINATOR = '\n' 
) 

您可以使用格式文件來描述數據 更多詳情,請參閱:

BULK INSERT

0

這聽起來像數據類型錯位。我想要做的最簡單的事情就是使用導入嚮導正確地獲取數據類型。

http://www.wiseowl.co.uk/blog/s231/schedule_data_import_in_sql_server_pt2.htm

一旦你有正確的數據類型設置,這樣做: 右擊表>腳本表作爲>新建>新查詢編輯器窗口。現在,只需將結果複製/粘貼到Excel。填寫所有字段的所有數據類型。另外,請執行以下操作:

右鍵單擊表格>腳本表格>插入到>新查詢編輯器窗口。

最終,你應該得到這樣的東西。

CREATE TABLE [dbo].[Something] 
(
    [Date] VARCHAR(MAX), 
    Change VARCHAR(MAX), 
    Index_Code VARCHAR(MAX), 
    Price_Return_Level VARCHAR(MAX) 
) 
    bulk insert dbo.GII_ICLstg 
    from 'C:\your_path_to_file.txt' 
    WITH 
    (
    FIRSTROW = 2, 
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n' 
) 
    GO 
    INSERT INTO dbo.Something 
    SELECT 
     [Date] = CASE WHEN ISDATE([Date])=1 THEN CAST([Date] AS DATETIME) ELSE NULL END, 
     [Change], 
     Index_Code, 
     Price_Return_Level = CASE WHEN ISNUMERIC(Price_Return_Level) = 1 
    FROM dbo.Something 

就我個人而言,我認爲這是做這些事情的最簡單方法。

相關問題