我有一个由' 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
如何迎合这个?在这种情况下,语法是什么?
答案 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找到一个新行时,它将以一个新行开头。
希望有帮助!