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

我已经根据传入的任何JSON数据定义了表,现在我需要用JSON数据填充该表。我的问题是我不知道如何动态创建mssql.Table行。进行以下操作

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] ] ] }


显然这不是我想要的。

做类似的事情

var row = new sql.Table.row;
row.item.add('13')
row.item.add('14')
row.item.add('15')
table.rows.add(row);


这就是我要尝试执行的操作,这将使我可以将所需的任何值添加到表中,而无需对其进行硬编码。查看mssql软件包文档,找不到任何提及此类内容的内容。

任何帮助将非常感激!谢谢!

最佳答案

您需要对数组进行解构以将数组的值作为单个值发送,您可以执行以下操作:

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

关于javascript - Node.js和mssql基于JSON动态填充表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45866033/

10-13 02:11