BCP批量导入学习笔记

学习过程中遇到的问题及解决方案:

1.执行exec master..xp_cmdshell

报错描述:
SQL Server阻止了对组件‘xp_cmdshell’的过程‘sys.xp_cmdshell’的访问。因为此组件已作为此服务嚣安全配置的一部分而被关闭。

解决方案:
通过查询分析器,选择Master数据库,然后执行以下SQL内容:
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go

 

 

最终语句范例:

exec master..xp_cmdshell 'BCP [TEST].[dbo].[USER] in E:\Faron\Project\ASP.NET\Faron.Console\ControlPriceStatisticsUpdater\ControlPriceStatisticsUpdater\bin\Debug\Data.txt -c -t -r -Usa -P88762329'

 

用法: 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 格式化文件]


邹键写的BCP存储过程

 

USE [TEST]
GO
/****** Object:  StoredProcedure [dbo].[sp_BCPInsert]    Script Date: 05/05/2012 13:39:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER   procedure   [dbo].[sp_BCPInsert]
@servername   varchar(200) --服务器名
,@username   varchar(200) --用户名,如果用NT验证方式,则为空 ' '
,@password   varchar(200) --密码
,@filename   varchar(1000) --目录名+文件名
,@tbname   varchar(500)= ' ' --数据库..表名
,@isout   bit=1 --1为导出(默认),0为导入
as
declare   @sql   varchar(8000)

 

set   @sql= 'bcp   " '+@tbname
+case   when   @isout=1   then   ' "   out '   else   ' "   in '   end
+ '   " '+@filename+ ' "   /c ' + '   /S " '+@servername
+case   when   isnull(@username, ' ')= ' '   then   ' '  
else   ' "   /U " '+@username   end
+ ' "   /P " '+isnull(@password, ' ')+ ' " '
exec   master..xp_cmdshell   @sql

 

posted on 2012-05-05 13:36  老有所依  阅读(172)  评论(0)    收藏  举报

导航