簡體   English   中英

批量插入和自定義分隔符 - (引號分隔符 - þ ) - (列 - ¶ )

[英]Bulk insert and custom delimiters - (quote Separator - þ ) - (Column - ¶ )

我四處搜索,但沒有找到任何可以將記錄批量插入 SQL 表的方法。 我嘗試了使用字符、ASCII 和 HEX 值的不同變體,但沒有成功。 每次產生錯誤。 我通常在 Excel 中進行更改,但他的文件有超過 5M 的記錄。 這必須是可能的,有沒有人有一個可行的解決方案或提供額外的指導? 先感謝您。

錯誤:

消息 4866,級別 16,State 1,第 110 行批量加載失敗。 數據文件中第 1 行第 1 列的列太長。請驗證是否正確指定了字段終止符和行終止符。 消息 7399,級別 16,State 1,第 110 行鏈接服務器“(null)”的 OLE DB 提供程序“BULK”報告了錯誤。 提供商沒有提供有關該錯誤的任何信息。 消息 7330,級別 16,State 2,第 110 行無法從鏈接服務器“(null)”的 OLE DB 提供程序“BULK”獲取行。

示例文件

在此處輸入圖像描述

在此處輸入圖像描述

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

輸出

在此處輸入圖像描述

用作引號的 UTF-8 þ (thorn) 0xC3BE 未被剝離,並且 BULK INSERT 不支持以二進制指定的多字節 FIELDQUOTE。

所以你必須把它去掉,但這是一個開始。

順便說一句,一個好的十六進制編輯器,就像現在在VS Code中可用的一樣,在這種情況下是無價的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM