使用 BCP 将 CSV 文件导入 Azure SQL 服务器

Import CSV files using BCP to Azure SQL Server

我的 BCP 命令如下所示:

BCP azuredatabase.dbo.rawdata IN "clientPathToCSVFile" -S servername -U user@servername -P pw -c -t,-r\n

我的 CSV 文件是 {cr}{lf} 格式。

我的 CSV 看起来像这样

125180896918,20,9,57.28,2020-01-04 23:02:21,282992,1327,4,2850280,49552
125180896919,20,10,57.82,2020-01-04 23:02:21,282992,1298,4,2850280,48881
125180896920,16,11,58.20,2020-01-04 23:02:21,282992,1065,4,2850280,48612
125180896921,20,12,69.10,2020-01-04 23:02:21,282992,515,4,2850280,10032
125180896922,20,13,70.47,2020-01-04 23:02:21,282992,1280,4,2850280,48766
125180896923,1,1,105.04,2020-01-04 23:02:21,,1296,4,2969398,49161

如您所见,还有一些空白字段。

我的输出看起来像这样

Starting copy...

0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 547

那么如何正确设置 BCP 命令?

您声明您的数据是 CRLF 格式(即 \r\n)。但是您的 bcp 命令被告知要查找 \n 的行终止符(使用 -r 选项)。

我本来希望看到“\r\n”的实际 CRLF 行终止符的前半部分被分成两半,其中 \r 包含在最后一列中,而 \n 被发现为行终止符,但看起来 BCP 没有加载任何行,因为它在您的文件中找不到 \n。

我用 Azure/BCP 的工作不多,所以也许其他人知道 Azure 的 BCP 如何处理这个问题,但是 BCP 的 SQL 服务器版本仍然会找到你的 \n 然后加载\r 到你的最后一列。

无论是那个还是你的行终止符现在都是你认为的那样。您是否使用文本编辑器查看过该文件(不是记事本,不是写字板...会显示行终止符和制表符等隐藏字符的东西)。

通常,当 BCP 不加载任何行(并且文件中有要加载的行)时,它可能与行终止符混淆。