批量插入时出错

Getting error while bulk insertion

我在尝试批量插入时遇到错误:

BULK INSERT #tbl_InterCompanyUploadDetail_Staging 
FROM '\SVRP03546008461D\QA\UploadTemplatewithvalidation.xlsx'
 WITH (FIRSTROW = 6, FIELDTERMINATOR ='\t', ROWTERMINATOR ='\n' )

我得到的错误是:

Bulk load data conversion error (truncation) for row 6, column 2 (Oracle Company Code).

Excel中的列的数据为470,数据库列中的数据为varchar(10)。 那么错误的原因可能是什么。

将“\n”替换为“0x0a”作为 ROWTERMINATOR,然后重试。

或者也

 ROWTERMINATOR = '''+cast (0x0000 as char(1))+'''

如果有效请告诉我。

同时检查 this

我怀疑将 XLSX 文件与 BULK INSERT 一起使用。如果支持 XLSX 文件,则不需要 FIELDTERMINATOR 和 ROWTERMINATOR。

XLSX 是 zip 文件,所以我猜(但不确定)XLSX 不受支持并且您收到 t运行cation 错误,因为它将它作为纯文本文件读取并且 BULK INSERT 获取长文本直至 FIELDTERMINATOR .

为了确认,您尝试将列的长度增加到数千个字符,然后 运行 批量插入,如果出现垃圾字符,那么它会将其作为纯文本文件读取。可能是垃圾字符,可能与您在记事本或记事本++中打开相同的 xlsx 文件相同。

您无法将 XLSX 批量加载到 SQL 服务器。您可以将 XLSX 转换为制表符分隔的文本文件并批量加载。

如果这是一次性操作,我会建议先转换为文本(但要注意 Excel 如何导出某些类型,如日期和大数字)。或者您可以使用 Import/Export 向导 (https://docs.microsoft.com/en-us/sql/relational-databases/import-export/import-data-from-excel-to-sql)

如果这是您需要重复的过程,我会创建一个 SSIS 脚本。

问题

BULK INSERT 可能不适用于 xlsx 文件,请尝试将 .xlsx 文件转换为 .csv 文件以实现此 (使用 BULK INSERT

第一个解决方案 - 使用 OPENROWSET

尝试将 OPENROWSETMicrosoft.ACE.OLEDB.12.0 供应商一起使用:

Insert into <rawdatatable> 
select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
                         'Excel 12.0;Database=D:\SSIS\FileToLoad.xlsx;HDR=YES', 
                         'SELECT * FROM [Sheet1$]')

SELECT * INTO Data_dq
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=D:\Desktop\Data.xlsx', [Sheet1$]);

第二个解决方案 - 使用 OPENDATASOURCE

SELECT * INTO Data_dq
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
'Data Source=D:\Desktop\Data.xlsx;Extended Properties=Excel 12.0')...[Sheet1$];

参考资料