Node + SQL Server:以stream的forms获取行数据

我尝试使用Microsoft驱动程序的 Node.Js连接器与SQL Server进行通信。 在连接器文档中,我find了一个名为'stream'的好选项。 它增加了asynchronous获取行对象的能力。

我的数据有一些具体的 – 一些列有大的二进制数据(> 100 Mb)。 所以即使是一排也许真的很大。 我正在寻找能够将每行数据作为一个stream。 这是可能的.NET驱动程序( CommandBehavior.SequentialAccess枚举)。 在Node.js中可能吗?

更新这里是一个代码来演示这个问题:

自定义可写stream模块:

var stream = require('stream'); var util = require('util'); function WritableObjects() { stream.Writable.call( this, { objectMode: true } ); } util.inherits( WritableObjects, stream.Writable ); WritableObjects.prototype._write = function( chunk, encoding, doneWriting ) { console.log('write', chunk, encoding); doneWriting(); }; module.exports = { WritableObjects: WritableObjects }; 

和数据库查询代码:

 var sw = new wstream.WritableObjects(); var request = new sql.Request(connection); request.stream = true; request.pipe(sw); request.query('SELECT DataId, Data FROM ds.tData WHERE DataId in (1)'); sw.on('error', function(err) { console.log('Stream err ', err) }); sw.on('pipe', function(src) { console.log('Stream pipe ') }); sw.on('finish', function(data) { console.log('Stream finish') }); 

我这个_write方法的chunk参数包含了dblogging的全部数据,而不是一个stream。 由于Data域包含一个大的varbinary数据存储节点进程也是巨大的。

是的,您可以使用node-mssql包进行查询,如下所述: https : //github.com/patriksimek/node-mssql

stream – streamlogging集/行,而不是一次返回它们作为callback的参数(默认值:false)。 您也可以独立启用每个请求的stream式传输(request.stream = true)。 如果您打算处理大量的行,请始终将其设置为true。