【发布时间】:2021-06-28 00:59:49
【问题描述】:
当我执行下面的bcp 命令将数据从.csv 文件导入到我在SQL Server 中的表中时,我收到了一个ODBC 错误。
命令如下:
DECLARE @Error INT
EXEC @Error = master..xp_cmdshell 'bcp DB.dbo.tbl_CASHBAL IN "H:\Imports\CASH BAL.csv" -f H:\CASHBAL.fmt -S myserver -U user -P xxxx'
SELECT @Error
这是SQL中的表结构:
CREATE TABLE [UBS].[dbo].tbl_BilotherCASHBALN
(
[DATE] VARCHAR(100),
[SCODE] VARCHAR(100),
[MY-ACC-N] VARCHAR(100),
[YOUR-ACC-N] VARCHAR(100),
[CASH-BAL] VARCHAR(100)
)
这是我的格式文件:
12.0
5
1 SQLCHAR 0 100 "\t" 1 DATE SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 100 "\t" 2 SCODE SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 100 "\t" 3 MY-ACC-N SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 100 "\t" 4 YOUR-ACC-N SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 100 "\r\n" 5 CASH-BAL SQL_Latin1_General_CP1_CI_AS
这是我在执行bcp 命令时遇到的错误:
错误 = [Microsoft][ODBC Driver 11 for SQL Server]
在 BCP 数据文件中遇到意外的 EOF
我在此处包含了完整错误消息的屏幕截图:
.
这是来自.csv 文件的一行数据(我需要在没有双引号的 SQL Server 表中):
"2021-01-30","IX","0001234567","XYZ01234","2305123.19"
【问题讨论】:
-
您的文件说分隔符是制表符,但在文件中您有逗号?
-
顺便说一句,你为什么要从带有
xp_cmdshell的 SQL 运行它,这会带来安全风险,只需从实际批处理或 Powershell SQL 代理作业运行它。 -
Jamez Z,设置格式文件的正确方法是什么,以便我的数据最终没有逗号,并且在运行我的 bcp 命令时不会出错?
-
bcp.exe 并不真正适用于引用的 CSV 文件。您需要将它们转换为未加引号的 CSV 文件(并将您的
"\t"字段终止符更正为",")或使用不同的技术来读取您的数据,例如使用Import-Csv读取数据的 PowerShell 脚本。 -
只需手动修改格式文件,指定分隔符不是“\t”(即制表符)即可。 bcp 正在寻找第一个选项卡以查找数据的第一个字段并且从未找到它......因此它尝试将所有数据加载到单个列中并在找到单个选项卡之前找到文件的结尾。这就是你的错误的意思。
标签: sql-server bcp