【问题标题】:Running a SQL Query using BCP使用 BCP 运行 SQL 查询
【发布时间】:2018-11-11 02:02:40
【问题描述】:

我刚开始学习使用 SQL Server 的 BCP,我正在使用它来查询 SQL Server 数据库并创建一个 .csv 文件。我可以使用以下命令毫无问题地创建文件:

bcp "SELECT 'ID' FROM [database].[dbo].[table]" queryout C:\DeskTop\test.csv -c -t, -T -S

但是,我需要运行更高级的查询,但遇到了问题。似乎查询正在被解析并且部分正在尝试执行。我收到错误说找不到 FROM 命令。这是我试图在 BCP 命令中运行的查询:

SELECT REPLICATE(0, 10-LEN(t.[CustId])) + CAST(t.[CustId] as       
                                                 nvarchar) as CustId
   ,(CASE WHEN t.[DisclId] = 'ECONSENT' THEN 'eConsent'
          WHEN t.[DisclId] = 'OLACC' THEN 'OLACC' END) as DisclId
   ,CONVERT(DATE,t.[AgreeDateTime],23) AS AgreeDateTime
  ,t.[Vers]
  ,'0' as ACNT_ID
  ,'Accepted' as Status_Desc
  ,'0001-01-01' as Last_Delay_Date
  ,'0' as Delay_Count
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY CustId, DisclId 
      ORDER BY AgreeDateTime DESC) AS RowNumber 
FROM [DATABASE].[dbo].[TABLE]) AS t
WHERE t.RowNumber = 1
ORDER BY CustId

使用 BCP 命令运行此查询的正确语法是什么?

提前谢谢你

【问题讨论】:

  • 您的最终BCP 查询看起来如何。希望您在查询中嵌入的任何内容都使用了单引号。
  • 那是我没有做的一件事。我会试试看。
  • 我发现了我的问题。我将查询包裹在我需要的引号中,但是通过键入它并逐个测试它(意味着我一次将项目添加到 select 语句中,然后运行 ​​BCP 命令)我能够运行它没有问题。在我在查询中复制和粘贴大部分内容之前。

标签: sql-server bcp


【解决方案1】:

bcp 最喜欢“内联查询”,其中查询可以连接到 cmd 提示符的单行中。我有几种情况,我的 SQL 语句对于这笔交易来说太大了。您也许可以侥幸逃脱,但如果不行,请创建一个视图。

使用视图输出。我就是这么做的。

为此,我是这样输出视图的:

bcp.exe <database>.dbo.<VIEW NAME> out "Drive:\Folder Path\file.csv" -T -S localhost -c -t"|" -C65001

但是,要回答您的直接问题,请将上述示例中的视图名称替换为您的查询,并用双引号括起来。

这将为您提供启用 UTF-8 且以竖线分隔的 CSV。

【讨论】:

    猜你喜欢
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2015-02-07
    • 1970-01-01
    • 2014-01-01
    • 2019-11-16
    • 2020-09-29
    相关资源
    最近更新 更多