【问题标题】:How can I save SQL Server BCP queryout result into the local network share folder?如何将 SQL Server BCP 查询结果保存到本地网络共享文件夹中?
【发布时间】:2016-02-16 10:56:00
【问题描述】:

我想编写查询以运行 BCP 实用程序并将查询结果保存到网络共享文件夹中。

为此,我将本地网络中另一台电脑的共享文件夹映射到我的驱动器。该驱动器名称是z。在我的资源管理器中,它向我显示了映射的驱动器。打开该驱动器可以工作,我可以完全控制它,但是当我运行此查询时:

EXEC xp_cmdshell 'bcp "SELECT  "028",rtrim(ltrim(anumber)),rtrim(ltrim(bnumber)),rtrim(ltrim(duration))  FROM [myTestReport].[dbo].[CDR]"  queryout z:\beh.csv -S DESKTOP-A5CFJSH\MSSQLSERVER1 -Umybehzad -Pbeh1368421 -f "f:\myFORMAT.fmt"  '

我收到此错误:

无法打开 BCP 主机数据文件

我该如何解决这个问题?谢谢。

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2012 bcp xp-cmdshell


    【解决方案1】:

    您在 SQL Server 上运行 BCP,它看不到本地 PC 上映射的驱动器。如果您的客户端上安装了 SQL Server 客户端工具(包括 BCP),只需从命令行运行 BCP 命令。

    如果您必须在服务器上通过 xp_cmdshell 运行 BCP,则使用的帐户必须具有网络共享和底层文件系统的权限。如果您是系统管理员角色成员,那将是 SQL Server 服务帐户,对于非系统管理员用户,那将是 xp_cmdshell proxy account。在这种情况下,您应该指定 UNC 路径而不是映射驱动器。

    【讨论】:

      【解决方案2】:

      跳出如下错误:

      • 在您的查询中有未转义的双引号 (")。你需要加倍这些。在您的查询中,"028" 需要变为 ""028""

      一个突出这一点的工作示例(在我的环境中测试):

      DECLARE @cmd VARCHAR(8000);
      SET @cmd='BCP "SELECT ""028""" QUERYOUT "C:\Temp\test.txt" -c -T -S ' + @@SERVERNAME + ' -d ' + DB_NAME();
      EXEC master.sys.xp_cmdshell @cmd;
      

      请注意,通常最好将 data_file 括在双引号中 (")。根据您的命令编写方式,如果文件名中有空格,它将失败。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多