使用BCP和隐藏路径从SQL导出数据时出错

时间:2013-03-27 05:48:47

标签: sql sql-server bcp

当我使用\\\twn-a110093\s$\SNData1.csv之类的隐藏路径时,它不起作用。

错误讯息:

  

[Microsoft] [SQL Native Client]无法打开BCP主机数据文件

也许'$'字符不被识别?我该如何解决这个问题?

Exec master..xp_cmdshell 'bcp " select * from sfm.dbo.tblSNDataDetail " queryout "\\twn-a110093\s$\SNData1.csv" -c -t, -T -S TWN-SQL-01'

3 个答案:

答案 0 :(得分:2)

简单地说你不能将BCP数据直接转到UNC路径,会出现双跳问题,你必须在2台服务器之间设置约束委托。您需要做的是首先将BCP发送到本地驱动器,然后将文件移动/复制到UNC路径,这实际上比直接BCP到UNC路径更快,即使您正确设置它也是如此。信不信由你,试一试。

答案 1 :(得分:0)

更可能是安全问题:

“由xp_cmdshell生成的Windows进程具有与SQL Server服务帐户相同的安全权限”

确保SQL Server服务帐户用户有权访问该路径/文件。

答案 2 :(得分:0)

您在BCP命令中使用UNC路径,实际上您直接在驱动器根S $上创建文件。它将涉及安全检查。您可以尝试的是:

1.首先将路径从驱动器根文件夹更改为子文件夹,如\twn-a110093\s$\Test\SNData1.csv

2.将SQL Server服务帐户写入权限设置为文件夹'test',如果SQL Server在NT Service下运行,则需要向网络服务帐户授予对文件夹的写入权限

3.如果“twn-a110093”与SQl服务器所在的服务器不同,则在文件共享文件夹中,您可能需要给予“每个人”完全许可。

4.如果一切都不起作用,那么先将BCP输出到本地文件夹,然后将robocopy文件复制到UNC Path,就像@Guna所说的那样,最好直接将文件写入UNC路径,这是事实。