SQL Server BCP使用小結

來源:互聯網
上載者:User

用法: bcp {dbtable | query} {in | out | queryout | format} 資料檔案
  [-m 最大錯誤數]             [-f 格式檔案]         [-e 錯誤檔案]
  [-F 首行]                   [-L 末行]             [-b 批大小]
  [-n 本機類型]               [-c 字元類型]         [-w 寬字元類型]
  [-N 將非文本保持為本機類型] [-V 檔案格式版本]     [-q 引號識別項]
  [-C 字碼頁說明符]           [-t 欄位結束字元]       [-r 行終止符]
  [-i 輸入檔案]               [-o 輸出檔案]         [-a 資料包大小]
  [-S 伺服器名稱]             [-U 使用者名稱]           [-P 密碼]
  [-T 可信串連]               [-v 版本]             [-R 允許使用地區設定]
  [-k 保留空值]               [-E 保留標識值]
  [-h"載入提示"]              [-x 產生xml 格式檔案]

--不利用格式檔案的匯入匯出(以下樣本皆省略了-S參數,因為是在本機,又是預設執行個體)
--簡單匯出表
exec master..xp_cmdshell 'bcp db_oa.dbo.T_User_list  out c:\a.xls -c -T'    --"-T"信任連接
exec master..xp_cmdshell 'bcp db_oa.dbo.T_User_list  out c:\a.txt -c -Usa -Pxxxxx'
--過濾匯出表
exec master..xp_cmdshell 'bcp "select top 3 * from db_oa.dbo.t_user_list"  queryout c:\a.txt -c -T'
--簡單匯入表
exec master..xp_cmdshell 'bcp db_oa.dbo.T_User_list_2  in c:\a.txt -c -T'
exec master..xp_cmdshell 'bcp db_oa.dbo.T_User_list_2  in c:\a.txt -c -T -E'    --加上"-E"啟用identity_insert on

--下面是利用XML格式檔案進行資料的匯入!
--建立測試表
USE db_oa;
GO
CREATE TABLE myTestFormatFiles (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50),
   Col4 nvarchar(50)
   );
GO

--輸出XML格式檔案
--說明一下:-t","是指定欄位分隔符號,稍後我們會講到
exec master..xp_cmdshell 'bcp db_oa..MyTestFormatFiles format nul -c -t"," -x -f c:\myTestFormatFiles.Xml -T'

/*
格式化後的檔案內容如下:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="Chinese_PRC_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="Chinese_PRC_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="Chinese_PRC_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Col3" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="Col4" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>

這裡我們對檔案關鍵字稍作解釋:
    <RECORD>父節點中的內容是對源檔案的格式化定義,即你要匯入的資料檔案
        <FIELD ID="1"(這裡是來源資料欄位ID) xsi:type="CharTerm"(欄位類型) TERMINATOR=","(欄位分隔符號) MAX_LENGTH="7"(最大長度)/>
            不難看出,我們最常修改的就是TERMINATOR,可以修改為"|"等你需要的分隔字元,注意最後一個欄位的分隔字元為"\r\n"
    </RECORD>
    <ROW>該父節點的內容是目標資料的格式化定義,即你需要匯入資料檔案的地方
        <COLUMN SOURCE="1"(這個非常重要,指定的是上面來源資料的欄位ID,當來源資料和目標資料欄位順序或數目不一致時,我們可以修改這裡達到我們想要的結果) NAME="Col1"(目標欄位名稱) xsi:type="SQLSMALLINT"(目標欄位類型)/>
    </ROW>
*/
--下面我們建立來源資料檔案,將以下內容粘貼到我們指定的資料檔案C:\myTestFormatFiles-c.txt中
/*
    10,Field2,Field3,Field4
    15,Field2,Field3,Field4
    46,Field2,Field3,Field4
    58,Field2,Field3,Field4
*/
--利用bcp格式檔案匯入資料
exec master..xp_cmdshell 'bcp db_oa..myTestFormatFiles in C:\myTestFormatFiles-c.txt -f C:\myTestFormatFiles.Xml -T'
--查看一下匯入的資料
select * from myTestFormatFiles
/*
    Col1    Col2    Col3    Col4
    10    Field2    Field3    Field4
    15    Field2    Field3    Field4
    46    Field2    Field3    Field4
    58    Field2    Field3    Field4
*/

--使用BULK INSERT匯入資料
USE db_oa;
GO
DELETE myTestFormatFiles;
GO
BULK INSERT myTestFormatFiles 
   FROM 'C:\myTestFormatFiles-c.txt' 
   WITH (FORMATFILE = 'C:\myTestFormatFiles.Xml');
GO
SELECT * FROM myTestFormatFiles;
GO
/*
    Col1    Col2    Col3    Col4
    10    Field2    Field3    Field4
    15    Field2    Field3    Field4
    46    Field2    Field3    Field4
    58    Field2    Field3    Field4
*/

--使用OPENROWSET 大容量行集提供者匯入
USE db_oa;
DELETE myTestFormatFiles;
GO
INSERT INTO myTestFormatFiles
    SELECT *
      FROM  OPENROWSET(BULK  'C:\myTestFormatFiles-c.txt',
      FORMATFILE='C:\myTestFormatFiles.Xml'     
      ) as t1 ;
GO
SELECT * FROM myTestFormatFiles;
GO
/*
    Col1    Col2    Col3    Col4
    10    Field2    Field3    Field4
    15    Field2    Field3    Field4
    46    Field2    Field3    Field4
    58    Field2    Field3    Field4
*/

--刪除測試表
DROP TABLE myTestFormatFiles

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.