[英]How to execute a pre-trigger in DocumentDB from a JS code or Stored Procedure
我在Azure DocumentDB中有一個存儲過程,該存儲過程批量插入文檔。 如何在SP中執行觸發器?
存儲過程:
function InsertBulk(obj) {
var collection = getContext().getCollection();
var collectionLink = collection.getSelfLink();
var count = 0;
if (!obj) throw new Error("The array is undefined or null.");
var docsLength = obj.docs.length;
if (docsLength == 0) {
getContext().getResponse().setBody(0);
}
tryCreate(obj.docs[count], callback);
function tryCreate(doc, callback) {
var isAccepted = collection.createDocument(collectionLink, doc, callback);
if (!isAccepted) getContext().getResponse().setBody(count);
}
function callback(err, doc, options) {
if (err) throw err;
count++;
if (count >= docsLength) {
getContext().getResponse().setBody(count);
} else {
tryCreate(obj.docs[count], callback);
}
}}
據我所知,@ Dev的回答是錯誤的,因為它說DocumentDB中的觸發器隱式觸發。 在每個SQL實現中,它們都是這樣做的,但在DocumentDB中卻沒有。 必須在DocumentDB中明確指定觸發器,但是不允許從sproc中指定觸發器。 觸發器僅在客戶端庫中受支持,即使這樣,您也必須為每個要觸發它們的操作顯式指定它們。
從好的方面來說,您可以將觸發邏輯移到存儲過程中。
您不能從存儲過程中調用觸發器。
當您對表執行任何操作時(例如Insert,Update,Delete),觸發器會隱式觸發。
假設您已經編寫了一個更新表記錄的過程。 當過程執行時,您創建的觸發器也會觸發,因為當對表執行任何操作時,它都會自動觸發。
祝你好運,希望這會有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.