如何使用 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
将数据从数据文件导入此表。 Id
和 Name
列包含 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的主要内容,如果未能解决你的问题,请参考以下文章