sql - 如何将存储在 Azure Blob 存储中的图像文件插入 Azure SQL 表中

标签 sql azure blob azure-blob-storage

我已设置 Azure Blob 存储并将一个 jpg 文件上传到容器中。

在 SSMS 中,我创建了所有外部数据源和凭据、主 key 等。

现在我尝试使用 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) 列类型,它允许它运行,但格式很奇怪。 (当您在记事本中打开图像时 - 这就是它的样子)

有人可以推荐一个解决方案吗? 另外,我是否在这里使用了正确的方法,因为我不确定如何使用此批量插入命令将 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 存储连接器!所以我所要做的就是连接到它并通过自定义视觉效果拉出图像。

关于sql - 如何将存储在 Azure Blob 存储中的图像文件插入 Azure SQL 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56475907/

相关文章:

sql - 查询以从组中查找第一个和第二个最大值

Azure DevOps - 我的自定义版本计数器变量存储在哪里?

php 视频和照片上传 : storing in database vs. uploading

opencv - 在实时视频上提取颜色之前的直方图均衡

mysql - 使用VBA在MySQL Blob中存储字节数组

mysql - 处理交易表中的到期信用?

sql - Oracle中如何实现自增的概念?

php - 存储 SQL 结果以在其他网页上使用

azure - 复制一个实例的数据库是否会影响 SQL Azure 服务器中另一实例的性能?

azure - 使用 Service Fabric 模板时出现错误的 dll 文件异常