繁体   English   中英

有没有办法从SQL Server Azure中的触发器删除中删除Azure Blob存储中的文件?

[英]Is there a way to delete a file in Azure blob storage from trigger delete in SQL Server Azure?

我有一个ASP.NET MVC应用程序,其中文件上传到Azure blob存储,生成的文件名保存在Azure中SQL Server数据库的表中。 我想直接在数据库中删除文件,并且希望删除触发器能够删除Azure blob存储中的文件。

也许PowerShell可以工作,但SQL Server Azure似乎不支持

在此版本的SQL Server中,不支持在“ master.dbo.xp_cmdshell”中引用数据库和/或服务器名称。

有任何想法吗? 谢谢

根据本文本文 ,CLR存储过程,查询通知,扩展存储过程在Azure sql上均不可用。

因此,我认为我们无法使用sql server触发器直接删除Blob。

一种方式:您可以在azure webjob中使用队列触发器来删除sql记录和blob文件。

您可以在Web应用程序中或使用azure Storage Explorer将消息(包括blob文件名)添加到队列中。

然后在webjob中,您可以根据此队列消息编写代码以删除blob文件和sql记录。

有关如何在Azure Web作业中使用队列触发器的更多详细信息,可以参考以下文章: https ://docs.microsoft.com/zh-cn/azure/app-service-web/websites-dotnet-webjobs-sdk-storage -queues -如何做

其他方式:

您可以在特定表上启用更改跟踪,以便可以使用计划的webjob发现对表的最新更改(即删除),并根据记录来删除Blob中的文件。

您可以在下面的查询和文章中参考更多详细信息:

1.启用变更追踪:

ALTER DATABASE yourdatabase  
SET CHANGE_TRACKING = ON  
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)  

ALTER TABLE YourBolbTable
ENABLE CHANGE_TRACKING  
WITH (TRACK_COLUMNS_UPDATED = ON) 

2.选择更改的记录:

SELECT
*
FROM CHANGETABLE(CHANGES YourBlobTable, 0) AS ChTbl; 

结果: 在此处输入图片说明

注意:我建议您可以将Blob名称用作主键,因为如果删除记录,更改跟踪表将仅记录主键。

有关如何使用变更跟踪表的更多详细信息,可以参考本文

然后,您可以使用timertrigger计划的webJob ]每分钟获取一次表更改记录。

最后,您可以使用azure storage SDK根据webjob中的此记录删除blob。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM