SQL Server 批量資料匯入

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   檔案   資料   

1. 由於Bulk Insert通常配合格式檔案大量匯入資料更方便,所以這裡先介紹bcp工具匯出格式化檔案的方法。

bcp是SQL Server提供的命令列工具 + 生產力提供了資料的匯出、匯入、格式檔案匯出等功能,匯出格式化檔案的文法如下:

bcp 資料庫名.使用者名稱.表名 format nul -- 這裡的nul必須存在,用於不是匯出和匯入資料的情況下  -f 輸出的格式檔案名 [-x] -c  -- -x參數指定輸出的格式檔案為xml格式(預設非xml格式); -c參數指定資料存放區方式為字元,並預設指定‘\t‘作為欄位間隔符;‘\n‘作為行間隔符  [-t 欄位間隔符] [-r 行間隔符號]  -- -t與-r參數可選,用於覆蓋-c指定的預設間隔符  -T -- 指定資料庫連接可信,即使用Windows身份登入  

 

2. Bulk Insert

 根據格式檔案匯入資料檔案,文法格式如下:、

Bulk insert 資料庫名.使用者名稱.表名  from ‘資料檔案路徑‘  with  (  formatfile = ‘格式檔案路徑‘,  FirstRow = 2    --指定資料檔案中開始的行數,預設是1  )  

 

3. OPENRORWSET(BULK)函數

有時,使用OPENROWSET(BULK)函數可以更靈活地選取想要的欄位插入到原表或者其他表中,其文法格式為:

INSERT INTO to_table_name SELECT filed_name_list  FROM OPENROWSET(BULK N‘path_to_data_file‘, FORMATFILE=N‘path_to_format_file‘) AS new_table_name  

 當然,該函數也可以這麼使用:

SELECT field_name_list INTO temp_table_name  FROM OPENROWSET(BULK N‘path_to_data_file‘, FORMATFILE=N‘path_to_format_file‘) AS new_table_name  

 

下面舉一個完整的例子:

 

1)建立資料庫、表並填充測試資料,指令碼如下:

-- 建立資料庫  CREATE DATABASE [db_mgr]  GO  --建立測試表  USE db_mgr  CREATE TABLE dbo.T_Student(      F_ID [int] IDENTITY(1,1) NOT NULL,      F_Code varchar(10) ,      F_Name varchar(100) ,      F_Memo nvarchar(500) ,      F_Memo2 ntext ,      PRIMARY KEY  (F_ID)  )   GO    --填充測試資料  Insert Into T_Student(F_Code, F_Name, F_Memo, F_Memo2) select  ‘code001‘, ‘name001‘, ‘memo001‘, ‘備忘001‘ union all select  ‘code002‘, ‘name002‘, ‘memo002‘, ‘備忘002‘ union all select  ‘code003‘, ‘name003‘, ‘memo003‘, ‘備忘003‘ union all select  ‘code004‘, ‘name004‘, ‘memo004‘, ‘備忘004‘ union all select  ‘code005‘, ‘name005‘, ‘memo005‘, ‘備忘005‘ union all select  ‘code006‘, ‘name006‘, ‘memo006‘, ‘備忘006‘  

2)我們可以使用SQL Server的master..xp_cmdshell預存程序將CMD的命令傳給系統,這樣就可以直接在SQL Server的查詢處理器中直接輸入bcp的命令,而不用切換到命令模式下執行。SQL Server 出於安全目的預設將該預存程序禁用了,開啟方法如下:

--開啟xp_cmdshell預存程序(開啟後有安全隱患)  EXEC sp_configure ‘show advanced options‘, 1;  RECONFIGURE;EXEC sp_configure ‘xp_cmdshell‘, 1;  EXEC sp_configure ‘show advanced options‘, 0;  RECONFIGURE;  

3)使用bcp匯出格式檔案:

EXEC master..xp_cmdshell ‘BCP db_mgr.dbo.T_Student format nul -f C:/student_fmt.xml -x -c -T‘  

4)使用bcp匯出資料檔案:

EXEC master..xp_cmdshell ‘BCP db_mgr.dbo.T_Student out C:/student.data -f C:/student_fmt.xml -T‘  truncate table db_mgr.dbo.T_Student -- 將表中資料清空  

注意:在實際使用過程中,資料檔案可以由程式產生,如日誌記錄等!

 

5)使用Bulk Insert語句大量匯入資料檔案:

BULK INSERT db_mgr.dbo.T_Student  FROM ‘C:/student.data‘  WITH  (      FORMATFILE = ‘C:/student_fmt.xml‘  )  

6)使用OPENROWSET(BULK)的例子:

INSERT INTO db_mgr.dbo.T_Student(F_Code, F_Name) SELECT F_Code, F_Name  FROM OPENROWSET(BULK N‘C:/student_c.data‘, FORMATFILE=N‘C:/student_fmt_c.xml‘) AS new_table_name -- T_Student表必須已存在    SELECT F_Code, F_Name INTO db_mgr.dbo.tt  FROM OPENROWSET(BULK N‘C:/student_c.data‘, FORMATFILE=N‘C:/student_fmt_c.xml‘) AS new_table_name -- tt表可以不存在  

參考:

使用 BULK INSERT 或 OPENROWSET(BULK...) 匯入大容量資料(尤其是關於安全的那部分,匯入遠程檔案時應特別注意):

http://msdn.microsoft.com/zh-cn/library/ms175915.aspx

建立格式檔案:

http://msdn.microsoft.com/zh-cn/library/ms191516.aspx

OPENROWSET (Transact-SQL):

http://msdn.microsoft.com/zh-cn/library/ms190312.aspx

BULK INSERT (Transact-SQL):

http://msdn.microsoft.com/zh-cn/library/ms188365.aspx

bcp 工具 + 生產力:

http://msdn.microsoft.com/zh-cn/library/ms162802.aspx

 

VIA BY http://rsljdkt.iteye.com/blog/1147707

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.