当我使用\\\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'
答案 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路径,这是事实。