BulkUpdate for Sequelize.org on MSSQL



我有一个包含三个字段的表

--------------------------------
id_ram   |    value  |  um 

id_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

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

//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

CCD_ 3也可以用于更新

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

有可能走另一条路吗?

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

const records = [
{ field1: 'value1', field2: 'value2' },
...
];
async function bulkUpsert(records) {
return Promise.all(
records.map((record) {
return Model.upsert(record);
})
);
}

最新更新