求高手问xp_cmdshell!!!!!100分

rainychan2009 2010-12-23 07:42:18
我需要快速的从服务器上拷贝大量的数据,因此我在本机使用BCP命令.
但是由于我的电脑没有装SQL Server,因此,我在本机装了SQL Native Client,之后拷贝了bcp.exe和bcp.rll这两个文件,放在D盘的一个文件夹中,cd到这个文件夹,可以正常的执行bcp命令.
但是现在我需要在程序中调用这个命令行,查了资料后,我现在服务器的查询分析器上使用了如下命令:
EXEC master..xp_cmdshell 'Bcp TestDB.dbo.UserInfo_bak out -c -S ServerTest -U sa -P 123456'

提示错误:
1 SQLState = HY000, NativeError = 0
2 Error = [Microsoft][SQL Native Client]Unable to open BCP host data-file
3 NULL
这是怎么回事?

...全文
203 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainychan2009 2010-12-24
  • 打赏
  • 举报
回复
6)又想起了一点:如果把bcp.exe bcp.rll这个两个文件丢在C:\WINDOWS下面,但是没有指明路径,那么就会出现莫名的数据库错误
这个是另外一个帖子里面的,一并在这里结了。
rainychan2009 2010-12-24
  • 打赏
  • 举报
回复
谢谢各位的积极响。尝试着使用BCP,现在问题得到解决了,因此,现在小结一下:
1. BCP可以用三种方式使用,其实是两种:在运行中运行命令行,在SQL查询分析器中运行。BCP运行的条件是执行目录下面有BCP.EXE和BCP.RLL,另外需要安装SQL Native Client这个数据库驱动,那么就可以在本机执行命令行向服务器取得数据和发送数据。在查询分析器中运行,这个需要发送一个SQL命令。
2.BCP的命令大概写成这样BCP 数据库名称.dbo(默认的).数据库表名称 IN[OUT] FileName -c -S 机器名或者IP[这个地方就这样就行了,不过有些资料说,在服务器名称后面可以加 \实例名称 我试过了,在cmd下是失败的。。。,不过这个服务器我目前是在局域网的方式下使用的] -U sa【默认】 -P 123456 这样正常情况下是okay的
3 在2中说到正常的情况下是okay的,但是异常的情况也挺多的:1)在尝试上传的时候,你的源文件是打开的,这样是不行的 2)源文件的格式不对(对于数据库中自增长的情况,你需要输入一个值,但是数据库会忽略的;字段之间是用\t隔开的,一定要与数据库表中的字段对齐,如果字段允许为空,那么直接加一个\t就好了) 3)在命令行,-S一定要大写。
4 对于程序中调用,WinExec(),这个API会立即返回一个调用的结果,但是这并不表示你的命令行已经执行完了,这句话的意思是,如果对应上传,不能在返回后立即删除源文件
5)对于上传的情况,源文件一定需要一个空行。。。
我的使用心得就这么多!
billpu 2010-12-24
  • 打赏
  • 举报
回复
你在查询分析器当中,通过xp_cmdshell调用的是服务器的bcp程序 不是客户机上的,如果你一定要在服务器上运行通过xp_cmdshell的,需要指定sqlserver的启动帐号,并且保证这个帐号在目标的目录上有写权限
用类似
EXEC xp_cmdshell
'bcp test111.dbo.A out "\\192.168.158.1\sharename\abc.txt" -c -S localhost -T'
我刚刚测试过没问题的
rainychan2009 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 billpu 的回复:]
就是这个问题
我以前也没试过不装sqlserver的机器上用bcp
刚刚找了台win7的机器,连服务器成功了
直接在cmd模式下运行bcp语句如下,成功没问题
bcp db.dbo.tb out "d:\abc.txt" -c -S 192.168.227.129 -U sa -P 111111
[/Quote]
哥,我在CMD下面也没有问题,但是问题是我的bcp不能放在C:\Windows\这个路径下面,放在其他路径就可以了,现在的问题是放在查询分析器中该如何执行
billpu 2010-12-23
  • 打赏
  • 举报
回复
就是这个问题
我以前也没试过不装sqlserver的机器上用bcp
刚刚找了台win7的机器,连服务器成功了
直接在cmd模式下运行bcp语句如下,成功没问题
bcp db.dbo.tb out "d:\abc.txt" -c -S 192.168.227.129 -U sa -P 111111
叶子 2010-12-23
  • 打赏
  • 举报
回复
http://social.msdn.microsoft.com/Forums/zh-SG/sqlexpress/thread/419e024e-cc8b-4be4-b4f3-07ce3cfdd1f1
参考一下
dawugui 2010-12-23
  • 打赏
  • 举报
回复
这个?不装sql server,就不知道了,帮顶.
billpu 2010-12-23
  • 打赏
  • 举报
回复
既然你是在查询分析器上运行的,那就代表你在服务器上运行了,那就不管客户机什么事情了
这个是应该你在客户机执行的bcp命令
并且不要用xp_cmdshell调用

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧