Если вы хотите вставить много строк, может быть проще использовать BatchTransaction.insert https://cloud.google.com/nodejs/docs/reference/spanner/2.1.x/BatchTransaction#insert
database.runTransaction(async (err, transaction) => {
if (err) {
console.error(err);
return;
}
try {
var itemsToInsert = [
{ SingerId: 12, FirstName: 'Mellissa', LastName: 'Garcia' },
{ SingerId: 13, FirstName: 'Russell', LastName: 'Morales' },
{ SingerId: 14, FirstName: 'Jacqueline', LastName: 'Long' },
{ SingerId: 15, FirstName: 'Dylan', LastName: 'Shaw' },
]
transaction.insert('Singers', itemsToInsert);;
await transaction.commit();
console.log(`${itemsToInsert.length} records inserted.`);
} catch (err) {
console.error('ERROR:', err);
} finally {
database.close();
}
});
Если вы хотите использовать DML, вы можете сделать оператор SQL программно.Следующее будет строить оператор вставки.Я не запускал вашу версию, но думаю, что в ней могут быть синтаксические ошибки, связанные с запятыми.
function buildSqlInsert(tableName, columnNames, rows) {
var sqlString = "INSERT " + tableName + " (" + columnNames.join(', ') + ") VALUES \n";
// add each row being careful to match the column order with columnNames
rows.forEach(row => {
sqlString += "(";
columnNames.forEach(columnName => {
var columnValue = row[columnName]
// strings should be quoted
if (typeof columnValue == 'string' || columnValue instanceof String) {
columnValue = "'" + columnValue + "'";
}
sqlString += columnValue + ", ";
});
// trim added chars.
sqlString = sqlString.substring(0, sqlString.length - 2);
sqlString += "),\n"
});
// trim added comma/newline
sqlString = sqlString.substring(0, sqlString.length - 2);
return sqlString
}
insertStatement = buildSqlInsert('Singers', Object.keys(itemsToInsert[0]), itemsToInsert)
const rowCount = await transaction.runUpdate({
sql: insertStatement,
});