添加','操作符到每行的末尾,以防它使用SQL在文件中不存在

时间:2015-12-17 13:21:15

标签: sql sql-server tsql sql-server-2012

我有一个由' 37'组成的文件。列的文件结构由','分隔。在某些情况下,在每一行的末尾都没有','所以我需要在执行Bulk insert command的同时处理这个问题,如果没有,那就是'在每行的末尾显示,然后自动添加并执行插入。

一行样本"默认情况下我们应该有36','在每一行':

test,00009,1,2,999,CANCELLED ,1,20,22700,,,,0,,,,,,20140811204912,,,,,,00500016,16,123454009,,,,,,,,0,0.00,0

in some case the file doesn't have same no. of comma or columns:

test,00009,1,2,999,CANCELLED ,1,20,22700,,,,0,,,,,,20140811204912,,,,,,00500016,16,123454009,,,,,,,,0,0.00

如何迎合这个?在这种情况下,语法是什么?

1 个答案:

答案 0 :(得分:1)

我想你的行以CSV格式的下一行/ n终止。因此,当您运行以下命令时,数据将按顺序安装到列中。

如果两个逗号之间没有数据,则会插入null,当找到下一行时,数据会更新到数据库表的下一行。

BULK
INSERT CSVTest
FROM 'c:\csvtest.txt'
WITH
( 
 FIELDTERMINATOR = ',',  
 ROWTERMINATOR = '\n'
 )
GO

您的数据格式

test1,00009,1,2,999,CANCELLED ,1,20,22700,,,,0,,,,,,20140811204912,,,,,,00500016,16,123454009,,,,,,,,0,0.00,0
test2,00009,1,2,999,CANCELLED ,1,20,22700,,,,0,,,,,,20140811204912,,,,,,00500016,16,123454009,,,,,,,,0,0.00,0

这里" test1" row进入第一行表格" test2"进入第二排表。

回复下面的意见:

考虑一个以逗号分隔并以新行终止的5列表。

4,1,,3,4
1,,,,,
1,1,
1
6,,,6,
1,1,1

并且您的表结构如下:

   col1 :varchar
   col2:varchar
   col3:varchar
   col4:varchar
   col5:varchar

使用上述命令时,这就是你的表格的填充方式

col1    col2    col3   col4   col5
 4       1      null     3      4
 1      null    null     null   null
 1      null      1      null   null
 1      null    null     null   null
 6      null    null     6      null
 1      null    null     null   null

无论有多少逗号,如果该行以新行终止,它将正确插入。

一旦SQL找到一个新行,它将跳过所有其余字段并为它们分配空值并开始插入新行。

可能是新行不是新知识的终止符,所以终结符的用途比使用输入命令。但是因为你有一个csv文件,你需要担心,新行将是分隔符,上面的命令将起作用。

所以不管是上面的5列,还是37列,就像你的情况一样 - 即使有一个值也没有逗号 - 当SQL找到一个新行时,它将以一个新行开头。

希望有帮助!