Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server批量插入CSV问题_Sql Server_Csv_Bulkinsert - Fatal编程技术网

Sql server SQL Server批量插入CSV问题

Sql server SQL Server批量插入CSV问题,sql-server,csv,bulkinsert,Sql Server,Csv,Bulkinsert,我遇到了一个以前从csv文件批量插入时从未遇到的问题。无论出于何种原因,最后一列在insert中没有被分隔。我一直收到我知道不可能为真的类型转换错误,所以我将数据类型更改为varchar以查看插入的内容。当我查看结果集时,我看到的不是.csv中的(例如35.44,56.82分为两列),而是(例如35.44,56.82分为一列)。这当然是SQL Server抛出该错误的原因,但我如何解决这个问题呢。我错过了一些简单的东西吗 总之,大容量插入忽略最后一个字段终止符,并将最后两列合并为一列 我的批量插

我遇到了一个以前从csv文件批量插入时从未遇到的问题。无论出于何种原因,最后一列在insert中没有被分隔。我一直收到我知道不可能为真的类型转换错误,所以我将数据类型更改为varchar以查看插入的内容。当我查看结果集时,我看到的不是.csv中的(例如35.44,56.82分为两列),而是(例如35.44,56.82分为一列)。这当然是SQL Server抛出该错误的原因,但我如何解决这个问题呢。我错过了一些简单的东西吗

总之,大容量插入忽略最后一个字段终止符,并将最后两列合并为一列

我的批量插入:

BULK
INSERT [YourTableName]
FROM 'YourFilePathHere' 
WITH
(
FIELDTERMINATOR=',',
ROWTERMINATOR = '\n'
)
一行:

YSQ3863,Bag 38x63 YELLOW 50/RL,CS,BAG,17.96,LB,1,50,50,YELLOW,,,,,,63,17.96,,,,38,,2394,,8.15,11.58,19.2,222.41

如果您是通过SSMS中的导入向导尝试此操作,请在向导中选择适当的数据类型和分隔符。我只是使用一个常规的旧批量插入语句。该特定行的
总数超过其余@gonavy96,因此,编译器在给出转换和截断问题之前无法知道在何处截断。另一种方法是使用另一个列分隔符,例如管道“|”(假设数据行中没有实际的管道符号),此时需要引用所有列。。。或者将csv中的分隔符更改为tab、pipe或其他格式,并将其另存为txt。csv是一个“逗号分隔值”文件。这意味着您的列由逗号分隔。如果在数据中添加逗号,则实际上创建了另一列。正如@scsimon所指出的,解决此问题的最佳方法是a)导出CSV,在每列周围加引号(当您另存为CSV时,Excel和其他程序中有一个选项)或b)使用不同类型的分隔符,以便在数据中使用逗号,SQL将使用不同的字符分隔列。这里的问题是您可能没有正确的行尾字符。如果您是通过SSMS中的导入向导尝试此操作,请在向导中选择适当的数据类型和分隔符。我只是使用一个常规的旧批量插入语句。该特定行的
总数比其他@gonavy96,因此,编译器在给出转换和截断问题之前无法知道在何处截断。另一种方法是使用另一个列分隔符,例如管道“|”(假设数据行中没有实际的管道符号),此时需要引用所有列。。。或者将csv中的分隔符更改为tab、pipe或其他格式,并将其另存为txt。csv是一个“逗号分隔值”文件。这意味着您的列由逗号分隔。如果在数据中添加逗号,则实际上创建了另一列。正如@scsimon所指出的,解决此问题的最佳方法是a)导出CSV,在每列周围加引号(当您另存为CSV时,Excel和其他程序中有一个选项)或b)使用不同类型的分隔符,以便在数据中使用逗号,SQL将使用不同的字符分隔列。这里的问题是,您可能没有合适的行尾字符。