添加'';如果为';使用SQL的文件中不存在

添加'';如果为';使用SQL的文件中不存在,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我有一个由“37”列组成的文件,该文件的结构由“,”分隔,在某些情况下,每行末尾没有“,”显示,因此我需要在执行批量插入命令时处理该问题,如果没有“,”显示在每行末尾,则自动添加并执行插入 一行示例“默认情况下,每行中应包含36'”: test,00009,1,2,999,CANCELLED ,1,20,22700,,,,0,,,,,,20140811204912,,,,,,00500016,16,123454009,,,,,,,,0,0.00,0 in some case the file

我有一个由“37”列组成的文件,该文件的结构由“,”分隔,在某些情况下,每行末尾没有“,”显示,因此我需要在执行
批量插入命令时处理该问题,如果没有“,”显示在每行末尾,则自动添加并执行插入

一行示例“默认情况下,每行中应包含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

如何解决这个问题?这种情况下的语法是什么?

我假设您的行以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”行进入表的第一行,“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找到新行时,它将以新行开始


希望能有所帮助!

但是如果该行缺少最后一个“,”,例如在本例中:test100009,1,2999,CANCELLED,1,2022700,,,,,,,,,,,,,,20140811204912,,,,,,,,,,,,,,,,,,,,,,,,,00500016,16123454009,,,,,,,,,,,,,,,,,,,,,,,,上述代码可以工作,只要该行以新行字符结尾。您必须有不同的t列和行的终止符。例如x,y,z?这里的列终止符是,行终止符是?如果你的代码最后没有逗号,这段代码将假定它是a)如果有下一行字符,则它是一个新行b)如果没有新行符号,则在同一行中添加数据我编辑了上面的问题以获得更好的解释,可以吗告诉我上述代码是否可以正常工作,但在某些情况下,我的源文件缺少一个属性&因此,它向我显示了一个错误,并且没有插入???Msg 4864,级别16,状态1,第1行批量加载数据转换错误(指定代码页的类型不匹配或无效字符)对于第1行第36列,那么您的源文件就正确了。至少尝试一下。