您的位置:首页 > 数据库

SQL Server BCP使用小结

2012-09-27 15:28 351 查看
[-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 格式化文件]

如果导入的表有自增ID,则数据源必须留占位空值,导入时会自动生成自增ID

--不利用格式化文件的导入导出(以下示例皆省略了-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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: