【问题标题】:Error when exeuting BCP: BCP host-files must at least contain one column执行 BCP 时出错:BCP 主机文件必须至少包含一列
【发布时间】:2016-02-08 07:20:20
【问题描述】:

我想在我的数据库中使用 BCP。为此,我写了这个查询:

EXEC xp_cmdshell 'bcp "SELECT rtrim(ltrim(anumber)),rtrim(ltrim(bnumber)),rtrim(ltrim(duration))  FROM [CDRDB].[dbo].[CDRTABLE]"  queryout d:\myOUT.txt -S . -UCDRLOGIN -Pbeh1368421 -f "d:\myFORMAT.fmt"  '

格式文件myFormat.fmt详细是这样的:

9.0
3
1 SQLNCHAR 0 5 "," 1 ANUMBER "" 
2 SQLNCHAR 0 10 "," 2 BNUMBER ""
3 SQLNCHAR 0 10 "\r\n" 3 DURATION ""

当我运行 BCP 命令时出现此错误:

我该如何解决这个问题?

【问题讨论】:

  • 您是否尝试先运行您的 select 语句?您可能需要像这样为这些列名起别名:rtrim(ltrim(anumber)) as Column1 尽管这只是一个猜测。您可能还想从示例代码中对您的登录名和密码做出反应。
  • 我将 rtrim(ltrim(anumber)) 更改为 anumber 并且...但这样不起作用
  • 关于 'unable to resolve column level collat​​ion confilct' 错误,互联网上有很多建议运行 BCP -V 并确保您的 BPC 版本与您从中提取的 SQL Server 匹配.所以尝试一下并用结果编辑你的问题。也可能有助于发布表 DDL(包括排序规则定义)

标签: sql-server tsql bcp


【解决方案1】:

您有一个-S . 开关。我认为这对 SQL Server 来说还不够。在 SSMS 中执行以下命令:

SELECT @@SERVERNAME;

并使用此查询的输出而不是.。

第二,真的需要格式化文件吗?您可以提供以下开关:-w -t, -r\r\n

DECLARE @stmt VARCHAR(8000)='bcp "SELECT rtrim(ltrim(anumber)),rtrim(ltrim(bnumber)),rtrim(ltrim(duration)) FROM [CDRDB].[dbo].[CDRTABLE]" queryout "d:\myOUT.txt" -UCDRLOGIN -Pbeh1368421 -w -t, -r\r\n -S ' + @@SERVERNAME;
EXEC master.sys.xp_cmdshell @stmt;

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 2015-11-21
    • 1970-01-01
    • 2022-01-13
    • 2011-06-28
    • 2021-04-16
    • 2021-09-29
    • 2014-08-06
    • 1970-01-01
    相关资源
    最近更新 更多