用法:?bcp?{dbtable?
|
?query}?{
in
?
|
?out?
|
?queryout?
|
?format}?數(shù)據(jù)文件
??
[
-m?最大錯誤數(shù)
]
?????????????
[
-f?格式化文件
]
?????????
[
-e?錯誤文件
]
??
[
-F?首行
]
???????????????????
[
-L?末行
]
?????????????
[
-b?批大小
]
??
[
-n?本機類型
]
???????????????
[
-c?字符類型
]
?????????
[
-w?寬字符類型
]
??
[
-N?將非文本保持為本機類型
]
?
[
-V?文件格式版本
]
?????
[
-q?帶引號的標識符
]
??
[
-C?代碼頁說明符
]
???????????
[
-t?字段終止符
]
???????
[
-r?行終止符
]
??
[
-i?輸入文件
]
???????????????
[
-o?輸出文件
]
?????????
[
-a?數(shù)據(jù)包大小
]
??
[
-S?服務器名稱
]
?????????????
[
-U?用戶名
]
???????????
[
-P?密碼
]
??
[
-T?可信連接
]
???????????????
[
-v?版本
]
?????????????
[
-R?允許使用區(qū)域設(shè)置
]
??
[
-k?保留空值
]
???????????????
[
-E?保留標識值
]
??
[
-h"加載提示"
]
??????????????
[
-x?生成xml?格式化文件
]
--
不利用格式化文件的導入導出(以下示例皆省略了-S參數(shù),因為是在本機,又是默認實例)
--
簡單導出表
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格式化文件進行數(shù)據(jù)的導入!
--
創(chuàng)建測試表
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
'
/*
格式化后的文件內(nèi)容如下:
<?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>
這里我們對文件關(guān)鍵字稍作解釋:
????<RECORD>父節(jié)點中的內(nèi)容是對源文件的格式化定義,即你要導入的數(shù)據(jù)文件
????????<FIELD?ID="1"(這里是源數(shù)據(jù)字段ID)?xsi:type="CharTerm"(字段類型)?TERMINATOR=","(字段分隔符)?MAX_LENGTH="7"(最大長度)/>
????????????不難看出,我們最常修改的就是TERMINATOR,可以修改為"|"等你需要的分隔符,注意最后一個字段的分隔符為"\r\n"
????</RECORD>
????<ROW>該父節(jié)點的內(nèi)容是目標數(shù)據(jù)的格式化定義,即你需要導入數(shù)據(jù)文件的地方
????????<COLUMN?SOURCE="1"(這個非常重要,指定的是上面源數(shù)據(jù)的字段ID,當源數(shù)據(jù)和目標數(shù)據(jù)字段順序或數(shù)目不一致時,我們可以修改這里達到我們想要的結(jié)果)?NAME="Col1"(目標字段名稱)?xsi:type="SQLSMALLINT"(目標字段類型)/>
????</ROW>
*/
--
下面我們創(chuàng)建源數(shù)據(jù)文件,將以下內(nèi)容粘貼到我們指定的數(shù)據(jù)文件C:\myTestFormatFiles-c.txt中
/*
????10,Field2,Field3,Field4
????15,Field2,Field3,Field4
????46,Field2,Field3,Field4
????58,Field2,Field3,Field4
*/
--
利用bcp格式化文件導入數(shù)據(jù)
exec
?master..xp_cmdshell?
'
bcp?db_oa..myTestFormatFiles?in?C:\myTestFormatFiles-c.txt?-f?C:\myTestFormatFiles.Xml?-T
'
--
查看一下導入的數(shù)據(jù)
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導入數(shù)據(jù)
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?大容量行集提供程序?qū)?
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
更多文章、技術(shù)交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
