Javascript MSSQL上Sequelize.org的批量更新

Javascript MSSQL上Sequelize.org的批量更新,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我有一个有三个字段的表。 -------------------------------- id_ram | value | um id\u ram是主键 我正在用sequelize设计一个Express API。我无法更新此表的多行。 我正在传递json数组,如下所示。 [ {"id_ram":"54","value":"11","um":"GB"}, {"id_ram":"34","value":"22","um":"GB"}, {"id_ram":"70"

我有一个有三个字段的表。

--------------------------------
  id_ram   |    value  |  um 
id\u ram
是主键

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

我正在传递json数组,如下所示。

[
  {"id_ram":"54","value":"11","um":"GB"},
  {"id_ram":"34","value":"22","um":"GB"},
  {"id_ram":"70","value":"33","um":"GB"}
]
这就是我迄今为止所尝试的

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的sequelize orm中实现像bulkCreate这样的bulkUpdate?

对于bulk create,您可以这样做。

//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()
也可用于更新

bulkCreate(data , {updateOnDuplicate : true })

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


是否可以采取另一种方法?

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

const records = [
  { field1: 'value1', field2: 'value2' },
  ...
];

async function bulkUpsert(records) {
  return Promise.all(
    records.map((record) {
      return Model.upsert(record);
    })
  );
}

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