c# - 是否可以从存储过程访问 Azure Blob?

标签 c# sql azure blob azure-blob-storage

我有一个存储过程,它通过网络路径访问服务器上的文件,但现在我们正在从服务器转移到 Azure Blob。是否可以通过存储过程访问 Azure Blob 上的文件?

存储过程主要读取服务器上的 CSV 文件并将这些文件中的数据插入到表中。

最佳答案

此功能已在 2017 年公共(public)预览版中记录,不久前我也遇到过类似的问题。

Azure SQL 数据库使您可以使用以下 SQL 语句直接加载存储在 Azure Blob 存储中的文件:

  • BULK INSERT T-SQL 命令将文件从 Blob 存储帐户加载到 SQL 数据库表中

  • OPENROWSET 表值函数,用于解析 Blob 存储中存储的文件并将文件内容作为一组行返回

以下示例显示了将文件内容加载到 SQL 数据库中的 BULK INSERT 命令:

BULK INSERT Product
FROM 'data/product.dat'
WITH ( DATA_SOURCE = 'MyAzureBlobStorageAccount');

可以使用OPENROWSET函数解析远程文件的内容并返回 文件中的行作为结果:

SELECT Name, Color, Price, Size, Quantity, Data, Tags
FROM OPENROWSET(BULK 'data/product.bcp', DATA_SOURCE = 'MyAzureBlobStorage',
            FORMATFILE='data/product.fmt', FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage') as products;

作为先决条件,您需要创建一个指向您的 Azure Blob 存储帐户的外部数据源。您将在 DATA_SOURCE 属性中使用此外部数据源的名称。以下是指向公共(public) Azure Blob 存储帐户的外部数据源示例:

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

如果您的 Azure Blob 存储帐户不是公共(public)的,则需要使用 Azure 门户为该帐户生成共享访问签名 (SAS) key ,将 SAS key 放入 CREDENTIAL 中,并使用 CREDENTIAL 创建外部数据源,如下例所示:

CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=2015-12-11&ss=b&srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z&spr=https&sig=copyFromAzurePortal';


CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH ( TYPE = BLOB_STORAGE,
   LOCATION = 'https://myazureblobstorage.blob.core.windows.net',
   CREDENTIAL= MyAzureBlobStorageCredential);

引用文献

https://azure.microsoft.com/en-us/updates/preview-loading-files-from-azure-blob-storage-into-sql-database/

https://github.com/Microsoft/sql-server-samples/tree/master/samples/features/sql-bulk-load/load-from-azure-blob-storage

https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql?view=sql-server-ver15

enter image description here

关于c# - 是否可以从存储过程访问 Azure Blob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63332731/

相关文章:

c# - MVC : File. 存在返回 false

c# - 在转换为 "out/ref"的表达式中支持 "object"参数

c# - 批量更新 SQL Server C#

c# - 如何配置 Teamcitys SonarQube Runner 来分析 C# 文件

sql - (如何)我可以在 MyBatis 的 SQL 查询中安全且与数据库无关地使用 "LIKE"吗?

MySQL 查询 - 日期/之间的问题

sql - 什么是数据库约束?

Azure 服务总线队列计数

Azure 忽略 ARM 模板中的站点配置设置

azure - 如何检查 Cosmos DB 中是否存在数据库?