Last active
August 23, 2018 03:32
-
-
Save titanve/409eabe365091362b6e83170e2344c5f to your computer and use it in GitHub Desktop.
Synchro tables from MS SQLServer to MySQL using node.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const mysql = require("mysql"); | |
const mssql = require("mssql"); | |
// const rl = require("readline-sync"); | |
let configmssql = "mssql://sa:[email protected]/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