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

Is it possible to access Azure Blob from a stored procedure?(是否可以从存储过程访问Azure Blob?)
本文介绍了是否可以从存储过程访问Azure Blob?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

推荐答案

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

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

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

  • OPENROWSET表值函数,用于解析存储在Blob存储中的文件,并以一组行的形式返回文件内容

以下示例显示将文件内容加载到SQL数据库的大容量插入命令:

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属性中使用此外部数据源的名称。以下是指向公共Azure Blob存储帐户的外部数据源的示例:

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

如果您的Azure Blob存储帐户不是公共的,则需要使用Azure门户为该帐户生成共享访问签名(SAS)密钥,将SAS密钥放入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://docs.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql?view=sql-server-ver15

这篇关于是否可以从存储过程访问Azure Blob?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)