【问题标题】:Convert a file URL to file byte in using a stored procedure?使用存储过程将文件 URL 转换为文件字节?
【发布时间】:2021-10-26 21:05:21
【问题描述】:

我的数据库有一张 person 表,在该表上有一个名为 PersonImageUrl 的列(托管在 azure 的公共容器中)。我即将迁移到新数据库。新数据库表中的新列需要VARBINARY(max)。我想创建一个存储过程,将PersonImageUrl(URL 指向的文件)的内容转换为字节数组,以满足我的迁移要求。这可能吗?

【问题讨论】:

  • 该字节数组的预期内容是什么? URL 指向的文件的 URL 或字节?
  • 您可以尝试类似stackoverflow.com/questions/4798538/… 的方法来获取图像,并将结果作为字节数组传递给您的存储过程。
  • @DaleK 我已经尝试过大量研究,但不幸的是我没有找到任何答案。
  • 好像你有图片的网址。所以你需要下载图像,转换为字节数组并保存到新的数据库。这不能用存储过程来完成。
  • 为什么新表also 不直接指向URL?将字节存储在数据库中很麻烦,原因有很多,最重要的是:SQL Server 磁盘空间比专门为存储而设计的基本文件系统方式更昂贵(并且通常对吞吐量敏感)并提供文件。

标签: sql sql-server azure-sql-database data-migration


【解决方案1】:

Azure SQL 数据库(和 SQL Server 2017+)具有与 Azure BLOB 存储的内置集成,对于公共容器,您甚至不需要凭据, 例如:

CREATE EXTERNAL DATA SOURCE BlobStore
WITH 
(
   TYPE = BLOB_STORAGE,
   LOCATION = 'https://MyStorageAccount.blob.core.windows.net'
);


SELECT BulkColumn Image 
FROM OPENROWSET
(
   BULK 'MyPublicContainer/someimage.jpg',
   DATA_SOURCE = 'BlobStore',
   SINGLE_BLOB
) AS blob;   

Examples of bulk access to data in Azure Blob storage

【讨论】:

  • 嗨@David Browne,我的朋友对此有一个相关的问题。在这里发布stackoverflow.com/questions/69743468/…
  • 嗨@David Browne,您是否尝试过将其与天蓝色容器中文件夹内的文件一起使用?不能打开。操作系统错误代码32(该进程无法访问该文件,因为它正在被另一个进程使用
  • Blob 容器没有文件夹。使用“/”来模拟文件夹结构只是一种约定。
  • 嗨@David Browne,我认为我的主要问题是,当我通过浏览器打开 URL 时它可以工作,但在存储过程中它会抛出此错误,无法打开。操作系统错误代码32(该进程无法访问该文件,因为它正在被另一个进程使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 2011-02-09
  • 2014-04-14
  • 2021-11-14
  • 2015-09-16
相关资源
最近更新 更多