I’ve been using the node mssql package in node scripts, and it’s great but it doesn’t have a pretty-printer for recordsets; console.dir() will print something out but you get some nasty-looking JSON formatted output.
This function is just a reusable printer for recordsets returned from sql.Request().query() or sql.Request().batch().methods.
Pass in the recordset and a function which prints the line, eg;
printTable(recordset, console.log);And you get something more famililar with a SQL Server Management Studio feel;
-- SELECT id, name from table id name =========== 6 p1 7 p2 8 p3Here’s the function:
// pretty-print a table returned from mssql node package // https://www.npmjs.com/package/mssql var printTable = function(recordset, printLine) { var padEnd = function (str, paddingValue) { while(str.length < paddingValue) { str = str + " "; } return str; }; var print = function(value) { return (value == undefined || value == null) ? "(null)" : value.toString(); } var maxWidth = {}; for(var c in recordset.columns) { maxWidth[c] = c.length; } var l = recordset.length; for(var r = 0; r < l; r++) { var row = recordset[r]; for(var c in recordset.columns) { var col = recordset.columns[c]; row[c] = print(row[c]); maxWidth[c] = Math.max(maxWidth[c], row[c].length); } } var head = ""; for(var c in recordset.columns) { var head = head + padEnd(c, maxWidth[c]) + " "; } printLine(head); var sep = Array(head.length).join("="); printLine(sep); for(var r = 0; r < l; r++) { var row = recordset[r]; var printedRow = ""; for(var c in recordset.columns) { printedRow = printedRow + padEnd(row[c], maxWidth[c]) + " "; } printLine(printedRow); } };