3

我有一个替换操作的预触发。我意识到,与 SQL Server 触发器不同,在 Azure 门户中更新文档时不会触发 DocumentDB 触发器。我是否错过了门户中的任何设置?或者这就是 DocumentDB 触发器的工作原理?只能从应用程序代码触发?

谢谢!

4

2 回答 2

2

你的理解是正确的。没有技术阻止程序允许来自门户的此功能,只是目前缺少它。

这当然是一个有效的请求@ https://feedback.azure.com/forums/263030-documentdb

于 2016-08-05T19:28:13.260 回答
0

DocumentDb 数据库触发器不会通过 DML 自动引发,例如创建和删除操作,这在其他数据库中很常见。

也就是说,必须为您在应用程序代码中进行的每个数据库操作指定触发器。另外,触发器应该是相同的类型,即一个插入操作只能是创建触发器类型,不能是替换类型。

因为,我有 azure 函数 documentdb 输出绑定,并且自己不执行 DML 操作。在浪费了很多时间调试之后,继续在数据库集合下创建一个存储过程,然后使用下面的代码通过 Azure 函数代码调用它。

这完美地工作:

// call stored procedure, nodejs, azure

'use strict';

var DocumentClient = require('documentdb').DocumentClient;
var client = new DocumentClient(process.env.DB_HOST, {masterKey: process.env.DB_M_KEY});

var sprocLink =
    'dbs/' + sprocDbName1 +
    '/colls/' + sprocCollName1 +
    '/sprocs/' + sprocName1;

var sprocParams = {
    key1: "val1",
    key2: "val2"
};

client
        .executeStoredProcedure(
                sprocLink,
                sprocParams1,
                function (err, results) {

                    if (err) {

                        context.log.error('err');
                        context.log.error(err);

                        return;
                    }

                    context.log.verbose('results');
                    context.log.verbose(results);

                    return;
                });

注意:为 DB_HOST(以 :443/ 结尾的 URL)、DB_M_KEY、sprocDbName1(您的数据库名称)、sprocCollName1(您的集合名称、sprocName1(您存储的过程名称)提供值

在执行上述操作之前,应在 DocumentDb 数据库集合中创建一个存储过程 (sproc)。

希望有帮助。

于 2017-11-29T04:07:27.340 回答