Sql 拆分一个包含一些双引号的VARCHAR字段
我正在使用一个存储过程将一个大型csv文件大容量插入到一个表中,所有这些文件都集中在一个设置为varchar8000的字段中。我不得不这样做,因为有些数据用引号括起来,有些则没有。在SQL Server 2008中,要用作批量导入的数据文件,CSV文件必须符合以下限制: 数据字段从不包含字段终止符。 数据字段中的任何值或所有值都用引号括起来。 因此,我的数据如下:Sql 拆分一个包含一些双引号的VARCHAR字段,sql,sql-server-2008,csv,Sql,Sql Server 2008,Csv,我正在使用一个存储过程将一个大型csv文件大容量插入到一个表中,所有这些文件都集中在一个设置为varchar8000的字段中。我不得不这样做,因为有些数据用引号括起来,有些则没有。在SQL Server 2008中,要用作批量导入的数据文件,CSV文件必须符合以下限制: 数据字段从不包含字段终止符。 数据字段中的任何值或所有值都用引号括起来。 因此,我的数据如下: Field1 "data", "data2", "data3", "data4", 123, 567, 354, 5,64,4565
Field1
"data", "data2", "data3", "data4", 123, 567, 354, 5,64,4565,54
它现在在SQL Server中处于一种诱人的状态。我现在如何清理数据并插入到一个表中,如下所示:我已经用正确的标题设置了这个新表
Field1
data
Field2
data 2
Field 3
data 3
等等
最终,这一切都需要在存储过程中执行,因为它需要在reporting services中执行。我一直在研究函数,但是当某些字段没有双引号时,如何使其工作?逗号够了吗?XML函数也是最好的吗?我采用以下方法导入数据: 将表插入所有列均为字符串的暂存表中。 将表从那里复制到具有所需列类型和结构的适当表中。 在您的情况下,代码的第二部分是:
insert into FinalTable(col1, . . . )
select (case when left(col1, 1) = '"' then replace(col1, '"', '')
else col1
end),
(case when isnumeric(col2) = 1 then cast(col2 as float)
end),
. . .
from StagingTable
毫无疑问,SSIS或使用格式文件中都有解决方案。我更喜欢使用暂存表方法,因为我发现使用暂存表调试数据库中的数据问题更容易。您使用的是什么数据库?或者您可以在导入csv文件之前预处理csv文件并删除双引号?例如,使用SED或一个小型C程序应该很容易做到。谢谢Gordon,我会看一看。JPW-不幸的是,预处理csv文件不是一个选项。嘿,我收到了以下错误:INSERT语句的select列表包含的项目少于INSERT列表。SELECT值的数量必须与INSERT列的数量匹配。暂存表只有一个名为字段1的字段-它如何知道在每个逗号之后,它需要进入最终表中的一个新字段?这是我的代码:insert into field_TABLE1,col2,col3…..col20选择大小写,当leftField1,1=''然后替换Field1',否则Field1结束,当isnumericField1=1时,则将Field1从Temp转换为float end_Table@user2470603 . . . 如果在insert语句中放入20列,则select语句中需要20列。没有了。同样如此。如果您想要两列,那么只需将这两列放在插入的列列表中即可。