簡體   English   中英

如何通過JS代碼或存儲過程在DocumentDB中執行預觸發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM