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不支持此功能。