Node.js和mssql基于JSON动态填充表

时间:2017-08-24 15:50:01

标签: javascript sql-server json node.js

我试图使用Node.js和" mssql"将一些JSON数据存储到SQL Server表中。包。但是,我需要动态生成表并填充它。

我根据任何JSON数据来定义表,现在我需要用JSON数据填充它。我的问题是我无法弄清楚如何动态创建mssql.Table行。执行以下操作

0.12.5

结果

var sql = require('mssql');

var table = new sql.Table('table');

table.columns.add('one', sql.VarChar(2));
table.columns.add('two', sql.VarChar(2));
table.columns.add('three', sql.VarChar(2));

table.rows.add('1', '2', '3');
table.rows.add('4', '5', '6');
table.rows.add('7', '8', '9');
table.rows.add('10', '11', '12');

table.rows.add(row);

添加时

Table {
  name: 'table',
  schema: null,
  database: null,
  path: '[table]',
  temporary: false,
  columns:
   [ { type: [sql.VarChar],
       length: 2,
       name: 'one',
       nullable: undefined,
       primary: undefined },
     { type: [sql.VarChar],
       length: 2,
       name: 'two',
       nullable: undefined,
       primary: undefined },
     { type: [sql.VarChar],
       length: 2,
       name: 'three',
       nullable: undefined,
       primary: undefined } ],
  rows:
   [ [ '1', '2', '3' ],
     [ '4', '5', '6' ],
     [ '7', '8', '9' ],
     [ '10', '11', '12' ] ] }

我得到了

var row = {one: '13', two: '14', three: '15'};
table.rows.add(row);
row = ['16', '17', '18']
table.rows.add(row);

这显然不是我想要的。

做类似

的事情
Table {
  name: 'table',
  schema: null,
  database: null,
  path: '[table]',
  temporary: false,
  columns:
   [ { type: [sql.VarChar],
       length: 2,
       name: 'one',
       nullable: undefined,
       primary: undefined },
     { type: [sql.VarChar],
       length: 2,
       name: 'two',
       nullable: undefined,
       primary: undefined },
     { type: [sql.VarChar],
       length: 2,
       name: 'three',
       nullable: undefined,
       primary: undefined } ],
  rows:
   [ [ '1', '2', '3' ],
     [ '4', '5', '6' ],
     [ '7', '8', '9' ],
     [ '10', '11', '12' ],
     [ [Object] ],
     [ [Array] ] ] }

是我想要做的,这将允许我在不对其进行硬编码的情况下向表中添加我想要的任何值。通过mssql包文档查看,我找不到任何提及此类内容的内容。

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

你需要对数组进行解构以便将数组的值作为单独发送,你可以这样做:

var rowObj = { one: '13', two: '14', three: '15' };
var rowArr = ['16', '17', '18'];

// converting obj to arr of object value
var rowObjArr = Object.values(rowObj);

// adding array to the table, using array destructuring
table.rows.add(...rowObjArr);
table.rows.add(...rowArr);

使用数组扩展运算符(...array),您可以执行以下操作:

function myFunction(x, y, z) { }

var args = [0, 1, 2];
myFunction(...args);

这将使我能够将数组的值作为单个参数发送给函数。

参考: Spread in function calls