【问题标题】:Error using BCP and hidden path to export data from SQL使用 BCP 和隐藏路径从 SQL 导出数据时出错
【发布时间】:2013-03-27 05:48:46
【问题描述】:

当我使用像\\\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'

【问题讨论】:

    标签: sql sql-server bcp


    【解决方案1】:

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

    【讨论】:

    • 有趣...如果进程在sql server服务帐户下执行,为什么会出现双跳问题?
    【解决方案2】:

    更有可能是安全问题:

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

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

    【讨论】:

    • 但我让“Account:Everyone”完全控制
    • 在文件上?隐藏共享的权限呢?
    • 一样。是“Account:Everyone”完全控制。
    【解决方案3】:

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

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

    2. 授予 SQL Server 服务帐户对文件夹“test”的写入权限,如果 SQL Server 在 NT 服务下运行,则需要授予网络服务帐户对文件夹的写入权限

    3.如果“twn-a110093”不是SQl Server所在的服务器,那么在文件共享文件夹上,你可能需要给'everyone'完全权限。

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

    【讨论】:

    • 好。但请记住,直接将文件写入 UNC 路径比先将文件写入本地然后将文件复制到 UNC 路径要慢。
    猜你喜欢
    • 2012-04-24
    • 1970-01-01
    • 2011-06-19
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多