如何使用 bcp 将 blob 文件列表导入 SQL Server

Posted

技术标签:

【中文标题】如何使用 bcp 将 blob 文件列表导入 SQL Server【英文标题】:How to import a list of blob files into SQL Server using bcp 【发布时间】:2021-05-29 11:17:22 【问题描述】:

我在 SQL Server 中有一个包含 3 列的表:

id (int), Name (varchar), Column_Vb (Varbinary)

我想使用BCP 将数据从数据文件导入此表。 IdName 列包含 id 和名称,但 Column_Vb(数据类型为 varbinary)列中的数据包含 blob 文件的位置。

当我执行BCP IN 命令时,我想将 blob 文件从指定位置加载到表中,但不是直接将位置名称写入表中。

有什么方法可以通过BCP 将这些 blob 文件加载到varbinary 列中吗?

我尝试过使用格式文件,但它不起作用。由于有很多数据,我需要一个批量导入选项本身。

这些屏幕截图显示了我的数据和格式文件:

【问题讨论】:

我不认为 bcp.exe 是您在此处寻找的工具,因为您正在尝试提取多个文件引用。如果是我,我会编写一个 PowerShell 脚本,该脚本使用 Import-Csv 加载您的第一个文件(将分隔符设置为 | 字符)并遍历其行以: 1. 将引用的二进制文件加载到字节数组中,然后 2. 将 Id、Name 和 Column_Vb 值作为单行插入。 什么是 BLOB?它是某种数据湖吗?你有 Azure 吗? @ASH blob 只是文件,它们包含二进制数据。它与数据湖或 azure 无关。 考虑在 C# 中使用 SqlBulkCopy 只有 C# 支持 SqlBulkCopy 吗?如果是这样,有没有办法使用 java 来做到这一点? @查理脸 【参考方案1】:

我以前使用 Azure 来执行此操作。没有 Azure,只是猜测,但可能是这样的。

CREATE TABLE [dbo].[TestBlob](
[tbId] [int] IDENTITY(1,1) NOT NULL,
[tbName] [varchar](50) NULL,
[tbDesc] [varchar](100) NULL,
[tbBin] [varbinary](max) NULL
) ON [PRIMARY]  

Insert TestBlob(tbName, tbDesc, tbBin) Select 
'81.pdf','PDF file', BulkColumn from Openrowset( Bulk 
'C:\blob\udoc\81.pdf', Single_Blob) as tb 

Insert TestBlob(tbName, tbDesc, tbBin) Select 'mountain.jpg','Image 
jpeg', BulkColumn from Openrowset( Bulk 'C:\blob\udoc\mountain.jpg', 
Single_Blob) as tb

Insert TestBlob(tbName, tbDesc, tbBin) Select 'Questionnaire.docx','Doc 
Question', BulkColumn from Openrowset( Bulk 
'C:\blob\udoc\Questionnaire.docx', Single_Blob) as tb

Insert TestBlob(tbName, tbDesc, tbBin) Select 'txpeng542.exe','Texpad 
Exe', BulkColumn from Openrowset( Bulk 'C:\blob\udoc\txpeng542.exe', 
Single_Blob) as tb

有关详细信息,请参阅下面的链接。

https://sqlrambling.net/2020/04/04/saving-and-extracting-blob-data-basic-examples/

【讨论】:

以上是关于如何使用 bcp 将 blob 文件列表导入 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver的BCP导入导出

BCP 从多个文本文件导入到多个表

SQL Server批量数据导出导入BCP使用

使用BCP导出导入数据

带有 xlsx ( Excel ) 文件的 sql bcp 实用程序

从bcp输出文件将数据导入MySQL