使用NodeJS将大表从一个表流式传输到另一个表

时间:2018-04-27 16:03:26

标签: node.js

我正在尝试将表格从一个表格复制到另一个表格。所以我想要传输大数据,因为它想要将该数据的内容复制到另一个表中。它更像是一个直接的副本。我可能会稍微按下数据,然后将其复制到新表中。我遇到的问题是事件一直在触发,我无法控制它。我尝试使用异步并等待我希望停止但我似乎没有工作的地方。我无法控制事件是否发生。这就是我到目前为止所拥有的。所以基本上我想在MSSQL中模拟一个游标。我不想下载所有数据,然后对其进行操作。

我没有显示下面数据的按摩,因为我只想查看是否可以将数据从一个表复制到另一个表。

var fs = require('fs');
var sql = require('mssql');
var sql2 = require('mssql');
var Request = require('tedious').Request; 
var TYPES = require('tedious').TYPES;  
var SqlString = require('sqlstring');

const config = {
    user: 'xxxx',
    password: 'xxx',
    server: 'xxxx\\',
    port: 'xxxx',
    database: 'xxxx',
    options: {
        instanceName: 'sql2014'
    }
};


function insertRecord(pool, record){
    return new Promise(function(resolve, reject){

        const request = pool.request();

        request.input('invoice_id', sql.Int, record.invoice_id);

        request.query('INSERT INTO _invoice_temp(invoice_id)  VALUES(@invoice_id)', (err, result) => {
            if(err){
                reject(err);
            }

            resolve(1);
        });
     });
}

async function main() {
    try
    {
        let pool = (await sql.connect(config));
        const request = pool.request();
        request.stream = true;
        request.query('select * from invoice');

        var data = await request.on('row', row => {
                return new Promise(function(resolve, reject){
                    resolve(row);
                });
            });

        await insertRecord(pool, data);

    }
    catch(err){
        console.log(err);  
    }
};

main();

1 个答案:

答案 0 :(得分:0)

如果您想将表从同一个数据库复制到另一个表,那么您应该只在db级别下完成它。从数据库获取数据不是一个好方法,然后通过Node.js等一些服务器端技术处理并将其插入到该数据库中。因此,您可以使用原始SQL查询来完成工作。

将所有列从一个表复制到另一个表:

INSERT INTO table2
SELECT * FROM table1
WHERE condition;

仅将一个表中的某些列复制到另一个表中:

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;

您可以在以下链接中详细了解它: https://www.w3schools.com/sql/sql_insert_into_select.asp