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
浙公网安备 33010602011771号