Skip to content

Instantly share code, notes, and snippets.

@titanve
Last active August 23, 2018 03:32
Show Gist options
  • Save titanve/409eabe365091362b6e83170e2344c5f to your computer and use it in GitHub Desktop.
Save titanve/409eabe365091362b6e83170e2344c5f to your computer and use it in GitHub Desktop.
Synchro tables from MS SQLServer to MySQL using node.js
const mysql = require("mysql");
const mssql = require("mssql");
// const rl = require("readline-sync");
let configmssql = "mssql://sa:password1@192.168.1.4/DATABASE1";
let connectionmysql = mysql.createConnection({
host: "192.168.1.8",
user: "sincro",
password: "password1",
database: "database2"
});
// console.dir("antes arrays");
const qsmssql = [
"select * from table1;",
"select * from table2;"
];
const tables = ["table1", "table2"];
// console.dir("despues arrays");
const execmysql = query => {
return new Promise(async (resolve, reject) => {
await connectionmysql.query(query, (error, results, fields) => {
if (!error) {
// console.dir(query);
resolve();
} else {
reject("Error: something went wrong (execmysql). Query: " + query);
}
});
});
};
const connmysql = () => {
return new Promise(async (resolve, reject) => {
await connectionmysql.connect(err => {
if (!err) {
console.dir("Connected MYSQL as id " + connectionmysql.threadId);
resolve();
// return;
} else {
reject("Error: something went wrong (connmysql)");
// console.error("error connecting: " + err.stack);
}
});
});
};
const transToString = valor => {
valor = "" + valor;
valor = valor !== null && valor !== undefined ? valor.trim() : "";
valor = "'" + valor + "'";
return valor;
};
(async () => {
let ini = new Date();
try {
let k = 0;
let keys = [];
let queryadd = "";
let fields = "";
let values = "";
let mysqltrunc = "";
let valor = null;
// console.dir("antes conexion mssql");
// CONECTAR MSSQL
let pool = await mssql.connect(configmssql);
if (pool !== null) console.dir("Connected MSSQL");
await connmysql();
const arrqsmssql = qsmssql.map(async (qmssql, i) => {
console.dir("i: " + i);
console.dir("qmssql: " + qmssql);
let result1 = await pool.request().query(qmssql);
const filas = await result1["recordset"];
mysqltrunc = "TRUNCATE TABLE " + tables[i] + ";";
console.dir("TRUNCATE table: " + tables[i]);
await execmysql(mysqltrunc);
k = 0;
keys = [];
queryadd = "";
fields = "";
values = "";
const filq = filas.map(async (iterator, p) => {
queryadd = "INSERT INTO " + tables[i] + " ";
// console.dir(iterator);
fields = "";
values = "";
k = 0;
if (p === 0) keys = Object.keys(iterator);
// console.dir(keys);
for (const field of keys) {
valor = iterator[field];
if (isNaN(valor)) {
valor = transToString(valor);
} else {
if (
field === "stringfield1" ||
field === "stringfield2"
) {
valor = transToString(valor);
}
}
fields += k == 0 ? field : ", " + field;
values += k == 0 ? valor : ", " + valor;
k++;
}
queryadd += "(" + fields + ") VALUES (" + values + ");";
const execadd = await execmysql(queryadd);
queryadd = "";
return execadd;
});
await Promise.all(filq)
.then(completed => {
// console.dir(completed);
})
.catch(error => {
console.error(error);
});
return result1;
});
await Promise.all(arrqsmssql)
.then(completed => {
// console.dir(completed);
console.dir("duracion: " + (new Date() - ini) * 1);
})
.catch(error => {
console.error(error);
});
} catch (err) {
// ... error checks
}
})();
mssql.on("error", err => {
// ... error handler
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment