有没有办法从 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 服务器数据库中的 table 中。我想直接在数据库中删除文件,我希望删除触发器能够删除 Azure blob 存储中的文件。
也许 PowerShell 可以工作,但 SQL Server Azure
似乎不支持它
Reference to database and/or server name in 'master.dbo.xp_cmdshell' is not supported in this version of SQL Server.
有什么想法吗?谢谢
根据此 article and this,CLR 存储过程、查询通知、扩展存储过程在 Azure 上都不可用 sql。
所以我认为我们不能使用 sql 服务器触发器直接删除 blob。
一种方式:
您可以在 azure webjob 中使用队列触发器来删除 sql 记录和 blob 文件。
您可以在 Web 应用程序或使用 Azure 存储资源管理器中向队列添加消息(包括 blob 文件名)。
然后在webjob中,可以写代码删除blob文件,sql根据这个queue消息记录
更多关于如何在azure webjob中使用queue trigger的详细信息,您可以参考下面的文章:https://docs.microsoft.com/en-us/azure/app-service-web/websites-dotnet-webjobs-sdk-storage-queues-how-to
另一种方式:
您可以在特定的 table 上启用更改跟踪,以便您可以使用计划的 webjob 发现对 table 的最新更改(即删除),并根据记录删除文件斑点。
您可以参考以下查询和文章的更多详细信息:
1.Enable 更改跟踪:
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 修改记录:
SELECT
*
FROM CHANGETABLE(CHANGES YourBlobTable, 0) AS ChTbl;
结果:
注意:我建议您可以使用 blob 名称作为主键,因为如果删除记录,更改跟踪 table 只需记录主键。
关于如何使用更改跟踪table的更多详细信息,您可以参考this article。
然后你可以使用 timertrigger or scheduled webJob ] 来获取 table 每分钟更改的记录。
最后在webjob中可以根据这条记录使用azure storage SDK删除blob
我有一个 ASP.NET MVC 应用程序,其中文件上传到 Azure blob 存储,生成的文件名保存在 Azure 的 SQL 服务器数据库中的 table 中。我想直接在数据库中删除文件,我希望删除触发器能够删除 Azure blob 存储中的文件。
也许 PowerShell 可以工作,但 SQL Server Azure
似乎不支持它Reference to database and/or server name in 'master.dbo.xp_cmdshell' is not supported in this version of SQL Server.
有什么想法吗?谢谢
根据此 article and this,CLR 存储过程、查询通知、扩展存储过程在 Azure 上都不可用 sql。
所以我认为我们不能使用 sql 服务器触发器直接删除 blob。
一种方式: 您可以在 azure webjob 中使用队列触发器来删除 sql 记录和 blob 文件。
您可以在 Web 应用程序或使用 Azure 存储资源管理器中向队列添加消息(包括 blob 文件名)。
然后在webjob中,可以写代码删除blob文件,sql根据这个queue消息记录
更多关于如何在azure webjob中使用queue trigger的详细信息,您可以参考下面的文章:https://docs.microsoft.com/en-us/azure/app-service-web/websites-dotnet-webjobs-sdk-storage-queues-how-to
另一种方式:
您可以在特定的 table 上启用更改跟踪,以便您可以使用计划的 webjob 发现对 table 的最新更改(即删除),并根据记录删除文件斑点。
您可以参考以下查询和文章的更多详细信息:
1.Enable 更改跟踪:
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 修改记录:
SELECT
*
FROM CHANGETABLE(CHANGES YourBlobTable, 0) AS ChTbl;
结果:
注意:我建议您可以使用 blob 名称作为主键,因为如果删除记录,更改跟踪 table 只需记录主键。
关于如何使用更改跟踪table的更多详细信息,您可以参考this article。
然后你可以使用 timertrigger or scheduled webJob ] 来获取 table 每分钟更改的记录。
最后在webjob中可以根据这条记录使用azure storage SDK删除blob