微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

批量插入和自定义分隔符 - (quote Separator - þ ) - (Column - ¶ )

如何解决批量插入和自定义分隔符 - (quote Separator - þ ) - (Column - ¶ )

我四处搜索,但没有找到任何可以将记录批量插入 sql 表的方法。 我尝试过使用字符、ASCII 和 HEX 值的不同变体,但没有成功。每次都产生一个错误。我通常在 Excel 中进行更改,但他的文件有超过 500 万条记录。这必须是可能的,有没有人有可行的解决方案或提供额外的指导?提前致谢。

错误

消息 4866,级别 16,状态 1,第 110 行 批量加载失败。数据文件中第 1 行第 1 列的列太长。验证是否正确指定了字段终止符和行终止符。 消息 7399,级别 16,状态 1,第 110 行 链接服务器“(null)”的 OLE DB 提供程序“BULK”报告了错误。提供者没有提供有关错误的任何信息。 消息 7330,级别 16,状态 2,第 110 行 无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”中获取一行。

示例文件

enter image description here

enter image description here

sql 命令

BULK INSERT [dbo].[AllTags]
FROM 'C:\Data\Swap Drive\File to import\01. Document Export\REL000001-REL296747\SAMPLE.DAT'
WITH (ROWTERMINATOR='\n',MAXERRORS=0,FIELDTERMINATOR='þ',TABLOCK,CodePage='RAW'
    )

解决方法

发布正确的表 DDL 会很有帮助,但这是一个开始:

drop table if exists #t
go
CREATE TABLE #t (
REFERENCEID   varchar (100),[BEGBATES]    varchar (100),[ENDBATES]    varchar (100),[BEGATTACH]   varchar (100),[ENDATTACH]   varchar (100),[PARENTBATES] varchar (100),[ATTACHMENT]  varchar (1000),CUSTODIAN varchar(100),DUPCUSTODIAN varchar(100),[FROM] varchar(100),[TO] varchar(100),CC varchar(100),BCC varchar(100),SUBJECT varchar(100),DATESENT varchar(100),TIMESENT varchar(100),DATERCVD varchar(100),TIMERCVD varchar(100),FILEEXT varchar(100),AUTHOR varchar(100),CREATEDATE varchar(100),CREATETIME varchar(100),DATELASTMOD varchar(100),TIMELASTMOD varchar(100),FILENAME varchar(100),DUPFILENAME varchar(100),FILELENGTH varchar(100),PGCOUNT varchar(100),DOCTYPE varchar(100),FAMDATE varchar(100),FAMTIME varchar(100),TIMEZONE varchar(100),PATH varchar(max),DUPPATH varchar(max),DEDUPHASH varchar(100),NATIVEPATH varchar(100),OCRPATH varchar(100),TITLE varchar(100),COMPANY varchar(100),DATEACCESSED varchar(100),TIMEACCESSED varchar(100),DATEPRINTED varchar(100),TIMEPRINTED varchar(100),CONVDATE varchar(100),CONVTIME varchar(100),ATTACHLIST varchar(100),FAMILYRANGE varchar(100),ALLCUSTODIANS varchar(100),ALLFILENAMES varchar(100),ALLFILEPATHS varchar(max),HASHMD5 varchar(100),HASHSHA varchar(100),TAGS varchar(100),DOCNOTE varchar(100),PRIVNOTE varchar(100),REDACTRSNS varchar(100),DISCOID varchar(100),MESSAGEID varchar(100),THREADID varchar(100),ATTACHCOUNT varchar(100),HIDDENTYPE varchar(100),METAREDACTED varchar(100),INREPLYTOID varchar(100),OBJECTHASH varchar(100),REVISION varchar(100),HEADER varchar(100),IMPORTANCE varchar(100),DELIVERYRECEIPT varchar(100),READRECEIPT varchar(100),SENSITIVITY varchar(100),LASTAUTHOR varchar(100),ESUBJECT varchar(100),DATEAPPTSTART varchar(100),DATEAPPTEND varchar(100),CALBEGDATE varchar(100),CALENDDATE varchar(100),CALBEGTIME varchar(100),CALENDTIME varchar(100),CALENDUR varchar(100),RECORDTYPE varchar(100),REVISIONNUMBER varchar(100),Exception varchar(100),ExceptionDetails varchar(100),TextLimitExceeded varchar(100)
) 
go
BULK INSERT #t
FROM 'C:\temp\test.DAT'
WITH (
    FIRSTROW=2,ROWTERMINATOR='0x0a',MAXERRORS=0,FIELDQUOTE =N'þ',FIELDTERMINATOR = '0x14',TABLOCK,CODEPAGE = '65001',DATAFILETYPE = 'Char'
    )

select * from #t

输出

enter image description here

用作引号的 UTF-8 þ (thorn) 0xC3BE 未被剥离,并且 BULK INSERT 不支持以二进制指定的多字节 FIELDQUOTE。

所以你必须把它去掉,但这是一个开始。

顺便说一句,一个很好的十六进制编辑器,就像现在在 VS Code 中可用的那样,在这种情况下是无价的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。