【问题标题】:bcp file sometimes with double quotesbcp 文件有时带有双引号
【发布时间】:2021-02-05 20:07:22
【问题描述】:

我有一个包含 2 列 ID、CompanyName 的 csv 文件。 我想 bcp 到带有格式文件的 sqlserver 表。此文件以逗号分隔。 .csv 文件的问题是 Companyname 只有在有多个单词时才会在它们周围加上双引号。

这是一个例子

CompanyID,CompanyName
1000,FirstCompanyName
2000,"Testing Comma Name"

我不知道如何为此编写格式文件。 这是我尝试过的

10.0
3
1      SQLCHAR             0        10      ",\""         1     CompanyID                SQL_Latin1_General_CP1_CI_AI
2      SQLCHAR             0        0       "\""          0     junk1                    SQL_Latin1_General_CP1_CI_AI
3      SQLCHAR             0        100     "\r\n"        2     CompanyName              SQL_Latin1_General_CP1_CI_AI

没有错误 当我在命令提示符下键入时

bcp "[a].b.[CompanyData]" in "C:\test.csv" -f C:\Data.fmt -t, -F2 -S "server1\prod01" -Uuername -Ppwd -e C:\Logs\error.log -o C:\Logs\outputlog.log 

没有错误,但表中也没有。

有人可以指导我吗?

谢谢 先生

【问题讨论】:

  • 如果您不想要双引号,请先删除它们,有很多方法可以做到这一点,无论是以编程方式还是在几乎任何文本编辑器中。如果您必须将其保存为不同的名称以防止破坏正确/格式合理的 CSV 文件,那也很简单!

标签: sql-server cmd bcp


【解决方案1】:

bcp 命令行实用程序无法处理列以零星双引号作为分隔符的 *.csv 文件。

一种可能的解决方案是将整行加载到临时表中的宽单列中。之后通过 bcp 或 BULK INSERT 使用 T-SQL 拆分为三列。

这是第二部分。 SQL Server 2017 及更高版本(由于增强的SPLIT() 功能)

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (line_from_file NVARCHAR(MAX));
INSERT INTO @tbl (line_from_file) VALUES
(N'1000,FirstCompanyName'),
(N'2000,"Testing Comma Name"');
-- DDL and sample data population, end

DECLARE @separator CHAR(1) = ',';

;WITH rs AS
(
    SELECT *
      , TRY_CAST('<root><r><![CDATA[' + 
         REPLACE(line_from_file, @separator, ']]></r><r><![CDATA[') + ']]></r></root>' AS XML) AS xmldata
    FROM @tbl
)
-- INSERT INTO targetTable (CompanyID, CompanyName)
SELECT c.value('(r[1]/text())[1]', 'INT') AS CompanyID
    , TRIM('"' FROM c.value('(r[2]/text())[1]', 'NVARCHAR(100)')) AS CompanyName
FROM rs CROSS APPLY xmldata.nodes('/root') AS t(c);

输出

+-----------+--------------------+
| CompanyID |    CompanyName     |
+-----------+--------------------+
|      1000 | FirstCompanyName   |
|      2000 | Testing Comma Name |
+-----------+--------------------+

【讨论】:

    猜你喜欢
    • 2014-04-22
    • 2016-03-04
    • 2019-01-22
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多