【问题标题】:BCP Error "Unable to open BCP Format File"BCP 错误“无法打开 BCP 格式文件”
【发布时间】:2020-02-02 04:35:30
【问题描述】:

我正在尝试从视图中生成一个新的格式文件,以创建一个以竖线分隔的平面文件。

我在 SSMS 2014 中使用 xp_cmdshell

我正在使用此代码:

BCP [UGM31EdwDemo].dbo.vwCCLF1_Output   format nul -c -f C:\CCLF1Demo.fmt -t, -T

这是我收到的结果:

SQLState = S1000,NativeError = 0

错误 = [Microsoft][ODBC Driver 13 for SQL Server]无法打开 BCP 格式化文件

任何帮助将不胜感激。

【问题讨论】:

  • 可能还有其他问题,但我在下面提供了一个答案,这可能是发生了什么。一个重要的注意事项是,您应该避免使用 XP_CMDSHELL。当命令被允许时,它会带来严重的安全风险。它应该在 SQL Server 上被禁用
  • 你会推荐什么命令来代替 XP_CMDSHELL?
  • 这应该作为另一个问题提交,但不要问使用哪个问题。只是问问,一般来说,生产环境/自动化还有哪些其他选项,而不是使用 xp_cmdshell 通过 t-sql 调用 BCP。但还有其他选择。 SSIS bcp 通过执行过程任务,t-sql “批量插入”,如果您只需要加载数据和 SSIS 数据流供初学者使用。

标签: sql-server ssms bcp


【解决方案1】:

很可能(因为有几件事可能出错)这是因为 SQL Server 服务帐户无法写入根 C:\ 文件夹。尝试使用不同的路径/网络共享。

使用 XP_CMDSHELL 时,请务必注意,您不再是执行传递的 BCP 命令的“用户”。当您将 BCP 命令字符串传递给 XP_CMDSHELL 时,会在底层操作系统(SQL Server 处理之外)上启动一个新的会话/线程。此新会话使用运行 SQL Server 的帐户的身份验证。

正是这个其他帐户需要访问才能写入您放置格式文件的位置。

此外,如果您的 SQL Server 是联网的 SQL Server(而不是在您的桌面上运行的 SQL Server),则很可能写入 C:\ 的权限已被阻止。甚至桌面可能已被 IT 部门配置为不允许写入 C:\ 根文件夹。

只需尝试写入您知道已获得所有写入权限的其他文件夹。

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 2023-03-12
    • 1970-01-01
    • 2019-02-11
    • 2017-07-05
    • 1970-01-01
    • 2012-04-14
    • 2016-04-14
    • 2017-08-20
    相关资源
    最近更新 更多