Sql-Server

從 Excel 導入

  • December 30, 2016

我正在嘗試將 excel 工作表導入 SSMS,但我遇到了數據類型問題。我遇到了包含文本和數字的列的問題。我希望將這些列作為 varchar 導入,但其中一些列作為“float”導入,並且出現“未知類型轉換”錯誤,該錯誤會導致包崩潰。更改映射似乎導致的問題多於解決的問題。我發現大部分時間似乎都有效的過程如下:

  1. 將僅包含標題和範例數據的工作表(以“播種”數據類型)導入新表
  2. 根據需要使用設計視圖更正數據類型
  3. 導入包含所有標題和數據的工作表

這適用於 9 張桌子。但是,我現在遇到了以下問題:我按照上面的步驟 (1) 和 (2)。執行步驟 (3) 時,對於其中沒有任何數據的列,我收到“未知列類型轉換”錯誤。出於某種原因,當表列的數據類型為“float”時,導入工具會將幾個空列解釋為“DateTime”。這導致導入失敗。我將 Excel 屬性中的數據類型更改為“數字”,但這似乎沒有什麼區別。我有兩個問題:

  1. 如何獲取以正確類型導入的數據?
  2. 為什麼進口商有時會出錯?其他沒有數據的列被辨識為“浮動”。

如你所說

  1. 將僅包含標題和範例數據的工作表(以“植入”數據類型)導入新表

  2. 使用設計視圖根據需要更正數據類型

  3. 導入包含所有標題和數據的工作表

我想說,如果你想導入帶有標題數據的 excel 表,那麼通過 TSQL 是最好的選擇。

首先,您必須在 SSMS 工具中檢查伺服器對象->連結伺服器->MICROSOFT.ACE.OLEDB.12.0 或其他 Microsoft ACE OLEDB 驅動程序中是否存在 ODBC 驅動程序。這取決於您的 SQL Server 版本。就我而言,它是 SQL Server 2012。

在此處輸入圖像描述

假設如果您使用的是 SQL Server 2012 並且有 MICROSOFT.ACE.OLEDB.12.0,則確保“允許程序內”已啟用。

你將如何做到這一點

右鍵點擊 MICROSOFT.ACE.OLEDB.12.0 驅動程序,在新視窗中將出現“允許程序內”選項。像這樣檢查那個選項在此處輸入圖像描述

像這樣在您的 SSMS 中寫下這個 TSQL 語句,通過這個查詢,您將使用您的數據導入您的 execl 列標題。

Use DatabaseName;
       Go
       select * INTO [User]
       from openrowset('MICROSOFT.ACE.OLEDB.12.0',
       'Excel 12.0; Database=C:\TestFolder\User.xlsx; HDR=yes; IMEX=1',
       'select * from [User$]');
       Go

Here DatabaseName is the Name of Database.
User is the Table Name .
User.xlsx is the Excel sheet , which you will import.
Make sure that HDR='yes' which will contains your header column names.

希望對您有所幫助。通過 SSMS 工具和 TSQL 腳本在 SQL Server 中導入 Excel 工作表數據。

有兩種方法可以解決這個問題。

一種是在所有數據之後的某個列中使用類似於以下內容的內容(然後將每 1,000 條記錄(或更少)包裝在一個INSERT語句中):

=CONCATENATE("('",A2,"','",B2,"','",C2,"','",(IF(D2<>"",TEXT(D2,"dd-Mmm-yyyy"),""))

…你明白了。然後將公式向下拖動到數據集的末尾,複製列並粘貼為值。

另一種方法是以每條記錄都是它自己的插入語句的方式編寫連接:

=CONCATENATE("INSERT INTO [database].[schema].[table] VALUES ('",A2,"','",B2,"','",C2,"');") 

如果您像我一樣懶惰並且不想找到每 1,000 條記錄以包裝在 INSERT 語句中,這將很有幫助。

在這兩種情況下,您剩下的就是可以在 SSMS 中執行的 TSQL。

引用自:https://dba.stackexchange.com/questions/159407