Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 大容量插入和自定义分隔符-(引号分隔符-þ;)-(列-¶;)_Sql_Sql Server_Delimiter Separated Values - Fatal编程技术网

Sql 大容量插入和自定义分隔符-(引号分隔符-þ;)-(列-¶;)

Sql 大容量插入和自定义分隔符-(引号分隔符-þ;)-(列-¶;),sql,sql-server,delimiter-separated-values,Sql,Sql Server,Delimiter Separated Values,我四处搜索过,但没有找到任何能够批量将记录插入SQL表的方法。 我尝试了使用字符、ASCII和十六进制值的不同变体,但没有成功。每次都会产生一个错误。我通常在Excel中进行更改,但他的文件有500多万条记录。这必须是可能的,是否有人有有效的解决方案或提供额外的指导?先谢谢你 错误: Msg 4866,16级,状态1,第110行 批量加载失败。数据文件中第1行第1列的列太长。验证是否正确指定了字段终止符和行终止符。 信息7399,16级,状态1,第110行 链接服务器(null)的OLE DB提

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

错误:

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

示例文件

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未被剥离,大容量插入不支持二进制指定的多字节FIELDQUOTE

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


顺便说一句,一个好的十六进制编辑器,比如现在在中提供的编辑器,在这样的情况下是非常宝贵的。

发布正确的表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未被剥离,大容量插入不支持二进制指定的多字节FIELDQUOTE

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


顺便说一句,一个好的十六进制编辑器,比如现在在中提供的,在这种情况下是非常宝贵的。

批量插入
是一个SQL Server命令,因此,我添加了该标记。脚本中指定的字段终止符错误,并且缺少分隔符。请参见指定分隔符etv。在使用
bulk insert
bcp.exe
进行此操作时,可能会遇到问题,因为您无法指定“text qualifier”字符,在本例中,它是您的
þ
字符。在SSIS中,您可能会更幸运,因为您可以在平面文件源配置中指定文本限定符字符。感谢您的反馈,我不是SQL个人,但将查看建议以尝试处理此问题。Peter,我尝试将“0x14”作为字段终止符,但没有成功。
bulk insert
是SQL Server命令,因此,我添加了该标记。脚本中指定的字段终止符错误,并且缺少分隔符。请参见指定分隔符etv。在使用
bulk insert
bcp.exe
进行此操作时,可能会遇到问题,因为您无法指定“text qualifier”字符,在本例中,它是您的
þ
字符。在SSIS中,您可能会更幸运,因为您可以在平面文件源配置中指定文本限定符字符。感谢您的反馈,我不是SQL个人,但将查看建议以尝试处理此问题。Peter,我尝试使用“0x14”作为字段终止符,但没有成功。David,在导入之前,我使用sed-I'/s\xC3\xBE//g'VOL001.dat删除了THORN字符。另外,我制作了所有文件varchar(max),因为它使事情变得更容易。你是对的,好的十六进制编辑器是无价的。这项任务变得更加困难,因为我的SQL知识是“0”,现在进入了按摩阶段。David,在导入之前,我使用sed-i'/s\xC3\xBE//g'VOL001.dat去掉了THORN字符。另外,我制作了所有文件varchar(max),因为它使事情变得更容易。你是对的,好的十六进制编辑器是无价的。这项任务变得更加困难,因为我的SQL知识为“0”,现在进入按摩阶段。