0

我有一個ASP.NET MVC應用程序的文件上傳到Azure blob存儲和生成的文件名保存在Azure中的SQL Server數據庫的表中。我想直接刪除數據庫中的文件,我希望刪除觸發器能夠刪除Azure blob存儲中的文件。有沒有辦法從SQL Server Azure中的觸發器刪除中刪除Azure blob存儲中的文件?

也許PowerShell中的工作,但似乎不是由SQL Server Azure的

參考「master.dbo.xp_cmdshell」數據庫和/或服務器名稱支持未在此版本的SQL Server的支持。

任何想法?謝謝

+0

你看過Azure函數嗎? https://azure.microsoft.com/en-us/services/functions/ –

+0

我已經有一個應用服務,我必須支付額外的費用嗎? 「基於定時器的處理」功能可以工作。 – juliernes

回答

0

根據此articlethis,CLR存儲過程,查詢通知,擴展存儲過程都不可用Azure SQL上。

所以我認爲我們不能通過使用sql server觸發器直接刪除blob。

單程: 您可以在azure webjob中使用隊列觸發器來刪除sql記錄和blob文件。

您可以在Web應用程序的隊列中添加消息(包括blob文件名)或使用Azure存儲瀏覽器。

然後在webjob中,您可以根據此隊列消息編寫代碼來刪除blob文件和sql記錄。

更多有關如何在蔚藍webjob使用隊列觸發的詳細信息,您可以參考以下文章:https://docs.microsoft.com/en-us/azure/app-service-web/websites-dotnet-webjobs-sdk-storage-queues-how-to

另一種方式:

您可以啓用變化對特定表跟蹤,讓你可以使用計劃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已變更記錄:

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

結果: enter image description here

注意:我建議你ld使用blob名稱作爲主鍵,因爲如果刪除記錄,則更改跟蹤表只記錄主鍵。

有關如何使用更改跟蹤表的更多詳細信息,請參閱this article

然後您可以使用timertriggerscheduled webJob]每分鐘獲取表格更改的記錄。

最後,您可以使用Azure存儲SDK根據此記錄在webjob中刪除blob。

+0

你幫我解決了第二個問題。因爲我有幾個表來保存文件,而不是啓用更改跟蹤,所以我創建了一個表來存儲所有表中刪除的所有文件,並在每個表中刪除觸發器。然後,日程安排webjob只需檢查該表是否有行並繼續刪除文件和行。感謝您的詳細解答。 – juliernes

相關問題