node-sql

A simple node wrapper for the wonderful Tedious driver.

Usage no npm install needed!

<script type="module">
  import nodeSql from 'https://cdn.skypack.dev/node-sql';
</script>

README

node-sql

A simple node-style callback wrapper for the wonderful Tedious driver.

Just call the exec function with a query, or sproc with a stored procedure, and get back an Array of JSON objects. Query in, JSON out.

exec(query, config, callback) Execute arbitrary SQL

query: String - standard SQL query e.g. 'Select * From tbl'.

config: Object - standard tedious config object.

callback: Function - standard node callback, returns (err, result). Where err = Error, and result = the query results.

var nodeSQL = require('node-sql')
//standard tedious config object : http://tediousjs.github.io/tedious/api-connection.html#function_newConnection
var config = {
  userName: process.env.USERNAME,
  password: process.env.PASSWORD,
  server: 'MyServer',
  domain: 'DOMAIN'
}
//result has data as an Array of JSON objects with column name => column value
app.get('/', function (req, res) {
  nodeSQL.exec(`Select FirstName, LastName From tbl Where FirstName='Moshe'`, config, function(err, result){
    if(err) return res.sendStatus(500);
    res.status(200).json(result);// [{FirstName: 'Moshe', LastName: 'Karmel'}]
  });
})

sproc(name, params, config, callback) Call a stored procedure

name: String - stored procedure name e.g. MyDB.dbo.GetDataById.

params: Object - Key Value pairs of parameter name to parameter value, e.g. { ID : 4 } (the type is inferred).

config: Object - standard tedious config object.

callback: Function - standard node callback, returns (err, result). Where err = Error, and result = the query results.

var nodeSQL = require('node-sql')
//standard tedious config object : http://tediousjs.github.io/tedious/api-connection.html#function_newConnection
var config = {
  userName: process.env.USERNAME,
  password: process.env.PASSWORD,
  server: 'MyServer',
  domain: 'DOMAIN'
}
//result has data as an Array of JSON objects with column name => column value
app.get('/:Id', function (req, res) {
  var params = { ID: req.params.Id };
  nodeSQL.sproc(`MyDB.dbo.GetDataById`, params, config, function(err, result){
    if(err) return res.sendStatus(500);
    res.status(200).json(result);// [{FirstName: 'Moshe', LastName: 'Karmel'}]
  });
})

tvp(name, params, config, callback) Call a table-value parameter sproc

name: String - stored procedure name e.g. MyDB.dbo.GetDataById.

paramName: String - Name of the Table-Value Parameter, e.g. Todos.

table: Array of Objects - Follow the pattern here tedious tvp object.

config: Object - standard tedious config object.

callback: Function - standard node callback, returns (err, result). Where err = Error, and result = the query results.

var nodeSQL = require('node-sql')
//standard tedious config object : http://tediousjs.github.io/tedious/api-connection.html#function_newConnection
var config = {
  userName: process.env.USERNAME,
  password: process.env.PASSWORD,
  server: 'MyServer',
  domain: 'DOMAIN'
}
//result has data as an Array of JSON objects with column name => column value
app.post('/:Id', function (req, res) {
  var body = req.body;
  var rows = [];
  // use the index to match the metadata in the table variable
  rows.push(body.Id, body.Text, etc.. );

  var table = {
    columns: [
      {name: 'Id', type: nodeSQL.TYPES.BigInt},
      {name: 'Text', type: nodeSQL.TYPES.VarChar, length: 13},
      ...
    ],
    rows: rows
  };

  nodeSQL.sproc(`MyDB.dbo.SaveTVPRows`, 'Stuff', table, config, function(err, result){
    if(err) return res.sendStatus(500);
    res.status(200).json(result);// [{Id: 1, Text: 'Hello'}, {Id: 2, Text: 'World'}]
  });
})

getColumnNames(query, config, callback) Get SQL column names

query: String - standard SQL query e.g. 'Select * From tbl'.

config: Object - standard tedious config object.

callback: Function - standard node callback, returns (err, result). Where err = Error, and result = the query results.

var nodeSQL = require('node-sql')
//standard tedious config object : http://tediousjs.github.io/tedious/api-connection.html#function_newConnection
var config = {
  userName: process.env.USERNAME,
  password: process.env.PASSWORD,
  server: 'MyServer',
  domain: 'DOMAIN'
}
//result has data as an Array of column names
app.get('/', function (req, res) {
  nodeSQL.exec(`Select TOP 1 * From tbl Where FirstName='Moshe'`, config, function(err, result){
    if(err) return res.sendStatus(500);
    res.status(200).json(result);// ['FirstName', 'LastName', etc...]
  });
})

Installation

$ npm install node-sql --save

License

MIT