Error = [Microsoft][SQL Server Native Client 10.0]无法打开 BCP 主数据文件(已解决)

需求:分页方式查出表中数据存入excel中,并给excel标记不同的编号

前提: #all_4表中数据已准备好

版本: sql server 2008


 


declare @n int 
set @n = 1 
 
while  @n = 100
begin 
	print '@n:'
	  print  @n
     
    EXEC master.dbo.sp_configure 'show advanced options', 1
    RECONFIGURE
    EXEC master.dbo.sp_configure 'xp_cmdshell', 1
    RECONFIGURE
    declare @fileName varchar(128)
		set @fileName ='D:\文件-'  + cast( @n as varchar)  +'.xls'

    IF OBJECT_ID('master..t_msg') IS NOT NULL
    drop table master..t_msg 
	select user_id 账号ID,	date 时间,	in_amount 总积分	,description 描述,	from_user 送礼人ID,	
	注册时间,	三方账号类型,	三方账号,	姓名,	身份证号,	手机号
	  into master..t_msg 
	from (
	select * ,row_number() over (order by user_id ,date ) rn
	from #all_4
	)t
	where rn  
	between 950000*(@n-1)+1 and 950000*(@n)

    declare @sql varchar(8000)


    set @sql = 'bcp "SELECT ''账号ID'' as 账号ID,''时间'' as 时间,''总积分'' as 总积分,''描述'' as  描述 ,''送礼人ID'' as 送礼人ID,''注册时间'' as 注册时间 ,''三方账号类型'' as 三方账号类型  ,''三方账号'' as 三方账号,''姓名'' as 姓名 ,''身份证号'' as 身份证号,''手机号'' as 手机号  union all SELECT  cast(账号ID as varchar),cast(时间 as varchar),cast(总积分 as varchar),cast(描述  as varchar),  cast(送礼人ID  as varchar),  cast(注册时间 as varchar),cast(三方账号类型 as varchar) ,cast(三方账号 as varchar) ,cast(姓名 as varchar) ,cast(身份证号 as varchar) ,cast(手机号 as varchar) FROM master..t_msg "  queryout " '+@fileName + '"  -c -T '
	
    EXEC master..xp_cmdshell  @sql

    EXEC master.dbo.sp_configure 'xp_cmdshell', 0
    RECONFIGURE
    EXEC master.dbo.sp_configure 'show advanced options', 0--配置选项 (bcp用法及高级选项)
    RECONFIGURE

end

报错信息:Error = [Microsoft][SQL Server Native Client 10.0]无法打开 BCP 主数据文件

报错信息所指步骤:数据存入excel文件   

猜测原因:1、select 语句拼错  2、要存入的文件是打开状态 

定位问题方法:将拼接的sql打印出来,与能正常运行的代码比对

最终定位具体原因:文件名是用双引号括起来的,而拼sql时多出了个空格,非常细节的一个问题

错误部分代码修正:

set @sql = 'bcp "SELECT ''账号ID'' as 账号ID,''时间'' as 时间,''总积分'' as 总积分,''描述'' as  描述 ,''送礼人ID'' as 送礼人ID,''注册时间'' as 注册时间 ,''三方账号类型'' as 三方账号类型  ,''三方账号'' as 三方账号,''姓名'' as 姓名 ,''身份证号'' as 身份证号,''手机号'' as 手机号  union all SELECT  cast(账号ID as varchar),cast(时间 as varchar),cast(总积分 as varchar),cast(描述  as varchar),  cast(送礼人ID  as varchar),  cast(注册时间 as varchar),cast(三方账号类型 as varchar) ,cast(三方账号 as varchar) ,cast(姓名 as varchar) ,cast(身份证号 as varchar) ,cast(手机号 as varchar) FROM master..t_msg "  queryout "'+@fileName + '"  -c -T '

完美解决~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值