Sql 数据中带有(逗号)的CSV文件的大容量插入/OPENROWSET格式文件终止符
我已经为我的百万行CSV编写了一个很好的导入,它运行得非常好(使用OPENROWSET批量(我没有使用批量插入,因为我需要与其他一些列交叉连接)。formatfile使用逗号作为终止符 以下是我用于开发的CSV示例:Sql 数据中带有(逗号)的CSV文件的大容量插入/OPENROWSET格式文件终止符,sql,sql-server,c#-4.0,bulkinsert,openrowset,Sql,Sql Server,C# 4.0,Bulkinsert,Openrowset,我已经为我的百万行CSV编写了一个很好的导入,它运行得非常好(使用OPENROWSET批量(我没有使用批量插入,因为我需要与其他一些列交叉连接)。formatfile使用逗号作为终止符 以下是我用于开发的CSV示例: Reference, Name, Street 1,Dave Smith, 1 Test Street 2,Sally SMith,1 Test Street 一旦我让它工作起来,有人提醒我数据本身可能有一个逗号,哇 Reference, Name, Street "1","Da
Reference, Name, Street
1,Dave Smith, 1 Test Street
2,Sally SMith,1 Test Street
一旦我让它工作起来,有人提醒我数据本身可能有一个逗号,哇
Reference, Name, Street
"1","Dave Smith", "1 Test Street"
"2","Sally Smith","1,Test Street" <-comma in street
参考、名称、街道
“1”、“戴夫·史密斯”、“测试街1”
“2”、“Sally Smith”、“1,Test Street”如果数据中可能出现字段终止符,则最好使用制表符或管道分隔符(或适用于数据的任何内容) 如果终止符字符出现在数据中,则解释为 一个终止符,不作为数据,该字符后面的数据是 解释为属于下一个字段或记录。因此, 仔细选择你的终结者,确保他们永远不会出现 在您的数据中
数据字段中的分隔符是分隔文件的常见问题。解决此问题的一些常用策略包括:
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR='","' MAX_LENGTH="5"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR='","' MAX_LENGTH="128" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR='"\r\n' MAX_LENGTH="128" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="Reference" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="2" NAME="Name" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="3" NAME="Street" xsi:type="SQLVARYCHAR"/>
</ROW>
</BCPFORMAT>
请注意字段终止符:我使用单引号来标识”,“
作为终止符,”\r\n
作为行终止符(第3列终止符)。我有根据地猜测Name
和Street
最多可包含128个字符,请根据需要进行编辑
问题:
引用
引用
不能作为INT(或SMALLINT、BIGINT等)返回。它将作为VARCHAR返回(xsi:type=“SQLVARYCHAR”
)引用
数据字段中删除双引号,调整XML格式文件,使字段ID=“1”
具有终止符=”,“'
,并进一步调整XML格式文件,使列源=“1”
具有xsi:type=“SQLINT”
对于一些附加信息,这个博客文章可能有帮助:
我知道大多数导入实用程序都会忽略字符串中逗号(或其他分隔符)——它们认为是字符串的一部分。此外,如果最终在字符串中(在引号之间)是制表符,会发生什么情况??您最终也会遇到同样的问题。看看是否可以指定字符串分隔符,您可能会没事。