将Excel从Azure Blob存储导入Sql Server时出现数据截断问题

Pரத*_*ீப் 12 sql sql-server azure openrowset azure-blob-storage

我正在尝试将Azure Blob存储中存在的以下Excel文件导入SQL Server

EXCEL文件

在此处输入图片说明

询问

SELECT * 
    FROM OPENROWSET(
        BULK 'container/testfile.xlsx', 
        DATA_SOURCE = 'ExternalSrcImport',
        FORMATFILE='container/test.fmt', FORMATFILE_DATA_SOURCE = 'ExternalSrcImport',
        codepage = 1252,
        FIRSTROW = 1
        ) as data
Run Code Online (Sandbox Code Playgroud)

格式化文件

10.0  
4  
1       SQLCHAR       0       7       "\t"     1     DepartmentID     ""  
2       SQLCHAR       0       100     "\t"     2     Name             SQL_Latin1_General_CP1_CI_AS  
3       SQLCHAR       0       100     "\t"     3     GroupName        SQL_Latin1_General_CP1_CI_AS  
4       SQLCHAR       0       24      "\r\n"   4     ModifiedDate     ""  
Run Code Online (Sandbox Code Playgroud)

格式文件说明

在此处输入图片说明

当我执行查询时,出现以下错误

消息4863,级别16,状态1,行210的行1,列1(部门ID)的大负荷数据转换错误(截断)。

看起来格式文件中的字段终止符不起作用,导入文件有什么想法吗?

Pio*_*otr 4

您的格式文件代表制表符分隔值文件的导入,但在源路径中您引用的是 xslx 文件。
Xslx 文件是多个 XML 文件的 ZIP 存档,批量导入将无法处理它。要打开它,您需要使用 Microsoft Jet 或 ACE 驱动程序,这里有一些示例: using-openrowset-to-read-excel。在处理文件之前,您需要将文件从 blob 存储下载到本地磁盘。您可以使用 SQL Agent 或 SSIS 下载它。

其他选项是将数据保存为 CSV 或制表符分隔文件,然后直接从 Blob 存储加载。