保存和测试存储过程/触发器(可能是用户定义的函数)用于分区集合

Chr*_*osa 1 azure azure-cosmosdb

尝试保存对已在分区集合中创建的存储过程的修改时,我收到以下错误:

无法保存脚本

以下是Azure门户中的详细信息:

操作名称无法保存脚本时间戳Fri Feb 17 2017 08:46:32 GMT-0500(东部标准时间)事件发起者 - 说明数据库帐户:MyDocDbAccount,脚本:bulkImport,消息:{"code":400," body":"{\"code \":\"BadRequest \",\"message \":\" 不支持对具有多个分区的集合中的脚本进行替换和upsert.

有问题的存储过程是可在此处找到的示例"bulkImport"脚本.

Lar*_*one 8

现在,DocumentDB中存在一个已知的缺失功能(如果您愿意,则为bug),您无法更新分区集合中的现有存储过程.解决方法是先删除它,然后以相同的名称/ ID重新创建它.


Cri*_*scu 5

与错误消息相反,事实证明_client.ReplaceStoredProcedureAsync(...)在分区集合上确实有效(截至 2018 年 6 月)。所以你可以做这样的事情:

try 
{
    await _client.CreateStoredProcedureAsync(...);
} 
catch(DocumentClientException dex) when (dex.StatusCode == HttpStatusCode.Conflict) 
{ 
    await _client.ReplaceStoredProcedureAsync(...);  
} 
Run Code Online (Sandbox Code Playgroud)

第一次创建您的 SP 后,当它不可用时(由于删除 + 重新创建),您将永远不会有任何时间量。