首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSSQL上的BulkUpdate for Sequelize.org

MSSQL上的BulkUpdate for Sequelize.org
EN

Stack Overflow用户
提问于 2020-03-11 20:37:23
回答 3查看 1.1K关注 0票数 0

我有一张三块地的桌子。

代码语言:javascript
复制
--------------------------------
  id_ram   |    value  |  um 

id_ram是主键。

我正在用sequelize设计一个速成API。我无法更新此表的多行。

我正在像下面这样传递json数组。

代码语言:javascript
复制
[
  {"id_ram":"54","value":"11","um":"GB"},
  {"id_ram":"34","value":"22","um":"GB"},
  {"id_ram":"70","value":"33","um":"GB"}
]

到目前为止,这就是我所尝试的。

代码语言:javascript
复制
router.post('/update',function (req, res) {

    var api_name = middleware_name + " /update"; 

    // - Check if the input array is passed 
    if(req.body.array == undefined) {

        var jsonErrorResponse = api_manager.PrepareJSONResponse(api_name, "", "value of input parameter [array] is undefined");
        api_manager.WriteErrorLogFile(req,api_name,jsonErrorResponse,jsonErrorResponse);
        res.send(jsonErrorResponse);

        return;
    }
    else {
        var create_values_array = "";
        try {
            //Parse INPUT JSON Array
            create_values_array = JSON.parse(req.body.array);
        }
        catch (err) {

            //Raise SyntaxError
            var jsonErrorResponse = api_manager.PrepareJSONResponse(api_name,"",err.message);
            var jsonInternalError = api_manager.PrepareJSONResponse(api_name,"",err);
            api_manager.WriteErrorLogFile(req,api_name,jsonErrorResponse,jsonInternalError);

            //Send error Response
            res.send(jsonErrorResponse);
        }

        ObjectModel.bulkCreate(
            create_values_array
        , {updateOnDuplicate: ["id_ram"]})
        .then(created_objects => { // Notice: There are no arguments here, as of right now you'll have to...

            //Send Response and Log Action
            var jsonData = api_manager.PrepareJSONResponse(api_name,created_objects,"");
            api_manager.WriteInfoLogFile(req,api_name,jsonData);

            res.send(jsonData);

        }).catch (function (err) {

            //Write Error Log
            var jsonErrorResponse = api_manager.PrepareJSONResponse(api_name,"",err.message);
            var jsonInternalError = api_manager.PrepareJSONResponse(api_name,"",err);
            api_manager.WriteErrorLogFile(req,api_name,jsonErrorResponse,jsonInternalError);

            //Send error Response
            res.send(jsonErrorResponse);
        });
    }
});

我们如何在MSSQL的后缀orm中实现像bulkUpdate这样的bulkCreate?

EN

回答 3

Stack Overflow用户

发布于 2020-03-12 02:58:31

对于批量创建,您可以这样做。

代码语言:javascript
复制
//array of object to be inserted
const data = [
   {field1: "value1"}, {field2: "value2"}...
]

Model.bulkCreate(data, {returning: true}) //if you don't pass returning true it will not return the data

bulkCreate()也可以用于更新。

代码语言:javascript
复制
bulkCreate(data , {updateOnDuplicate : true })
票数 0
EN

Stack Overflow用户

发布于 2020-03-16 09:56:50

Hello{updateOnDuplicate: true }引发错误,因为Server不支持此功能。

可以换一条路吗?

票数 0
EN

Stack Overflow用户

发布于 2021-06-04 02:38:00

您可以通过编写一个函数在循环中调用Sequelize 上插函数来实现这一点,如下所示:

代码语言:javascript
复制
const records = [
  { field1: 'value1', field2: 'value2' },
  ...
];

async function bulkUpsert(records) {
  return Promise.all(
    records.map((record) {
      return Model.upsert(record);
    })
  );
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60644109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档