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

时间:2019-06-06 10:40:47

标签: sql azure blob azure-storage-blobs

我已经建立了Azure blob存储并将一个jpg文件上传到了容器中。

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

现在,我正在尝试使用BULK插入命令将图像放入表中。本质上,此表将存储已发送电子邮件的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');

1 个答案:

答案 0 :(得分:1)

我找到了正确的方法。由于某种原因,普通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存储连接器!因此,我要做的就是连接到那,并通过自定义视觉效果浏览图像。