SQL Server BCP使用小结

本文详细介绍了SQL Server 中使用 bcp 工具进行数据的导入和导出操作,包括简单导入导出、过滤导出、使用 XML 格式化文件进行数据导入等内容。同时,通过示例展示了如何使用 XML 格式化文件来创建、读取和导入数据,提供了在实际工作中灵活应用的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转:http://www.cnblogs.com/qanholas/archive/2011/07/05/2098616.html

用法: 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

 

PS:总结:工作用自己常用的导入导出命令:

导出:

exec master..xp_cmdshell 'bcp Two_Otherdb.dbo.EnterprisePolluteOutputInfo   out c:\EnterprisePolluteOutputInfo.txt -c -t"|" -U   sa -P 123456'  //  -t"|" 意思是用“竖线” | 做字段分隔

导入:

BULK INSERT sharedb.dbo.EnterprisePolluteOutputInfo
FROM 'C:\rs\test\pre1.txt'
WITH ( FIELDTERMINATOR ='|', FIRSTROW = 1 )

========================================================================================================================================

--下面是利用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值