sql - 如何将存储在 Azure Blob 存储中的图像文件插入 Azure SQL 表
问题描述
我已经设置了一个 Azure blob 存储并将一个 jpg 文件上传到容器中。
在 SSMS 中,我创建了所有外部数据源和凭据、主密钥等。
现在我正在尝试使用 BULK insert 命令将图像放入表中。本质上,此表将存储已发送电子邮件的 HTML 预览图像。他们需要有一个相应的 ID。
然后将该表输入到 powerBI 中,我将在该程序中进行 base64 编码以显示图像。(找到这个方法:https ://community.powerbi.com/t5/Desktop/How-to-use-Images-Stored-in-a-SQL-Server-Table-with-Power-BI/td-p/383111 )
但是,当尝试运行批量插入命令时,出现此错误:
第 1 行第 1 列 (HTML_Image) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。
我尝试使用 varchax(max) 列类型,它允许它以一种奇怪的格式运行。(当您在记事本中打开图像时 - 这就是它的样子)
谁能推荐一个解决方案?另外,我什至在这里使用了正确的方法,因为我不确定如何使用此 BULK 插入命令与图像一起插入 ID 值?
CREATE TABLE [dbo].[SFMC_HTML_Images](
[HTML_Image] varbinary(max) NULL,
SendID varchar(50) null
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
BULK INSERT SFMC_HTML_Images
FROM '4017033.jpg'
WITH (DATA_SOURCE = 'MyAzureBlobStorage');
解决方案
我找到了正确的方法。出于某种原因,普通 SQL 和 Azure SQL 方法之间的区别让我感到困惑。我搜索的所有地方都在说 Azure 不支持 OPENROWSET。但我尝试了这种方法,它奏效了:
Insert into SFMC_HTML_Images (HTML_Image)
Select BulkColumn FROM OPENROWSET(
BULK '4017033.jpg',
DATA_SOURCE = 'MyAzureBlobStorage', SINGLE_BLOB) AS ImageFile;
但是,图像数据的长度为 170,000+,PowerBI 限制为 32k :( 因此图像被裁剪。
从那以后,(一上午)发现 PowerBI 有自己的 Azure Blob 存储连接器!所以我所要做的就是连接到它并通过自定义视觉拉动图像。
推荐阅读
- python - 模块 skimage.color 中缺少对象
- angular - Angular7: Global Guard - CanDeactivate 接口
- django - Graphene Django 查询 Elasticsearch
- html - 缩放并聚焦到图像的 x 和 y 坐标
- amazon-ses - Mautic 和 Amazon SES 集成问题
- java - JAXB 与 IDEA + Android 插件上的 dataBinding 冲突
- angular - 错误类型错误:“this.profileService.getUserProfile(...) 未定义”
- angular - keyup 在几个输入字段上输入
- node.js - NodeJs 是否需要公共文件权限才能访问文件?
- node.js - 如何使用 jest 模拟链式函数调用?