运行node-mssql查询时出错

我想运行node-mssql查询,如果我运行简单quires它正在执行。 但是当我使用OPENROWSETMicrosoft.ACE.OLEDB.12.0 ,它显示出一些错误。

这里是server.js代码

 var express = require('express'); var app = express(); app.get('/', function (req, res) { var sql = require("mssql"); // config for your database var config = { user: '..', password: '....', server: 'localhost\\SQLEXPRESS', database: 'test_databasae' }; // connect to your database sql.connect(config, function (err) { if (err) console.log(err); else console.log("Connection successful"); // create Request object var request = new sql.Request(); // query to the database and get the records /*request.query('select * from table1', function (err, recordset) { if (err) console.log(err) // send records as a response res.send(recordset); });*/ request.query('INSERT INTO [mytable](SalesPersonID,TerritoryID)' + 'SELECT SalesPersonID,TerritoryID FROM OPENROWSET(' + '\'Microsoft.ACE.OLEDB.12.0\',\'Excel 12.0\';\'Database=D:\\sample\\test\\data\\1540_OPENROWSET_Examples.xls;,\'' + 'SELECT SalesPersonID, TerritoryID FROM [SELECT_Example$])',function(err,recordset){ if(err) console.log(err) console.log("success"); }); });});var server = app.listen(5000, function () { console.log('Server is running..');});` 

当我命令提示符下我命令节点server.js我遇到命令提示符下列错误:

 Server is running.. Connection successful { [RequestError: Incorrect syntax near ')'.] name: 'RequestError', message: 'Incorrect syntax near \')\'.', code: 'EREQUEST', number: 102, lineNumber: 1, state: 1, class: 15, serverName: 'localhost\\SQLEXPRESS', procName: '', precedingErrors: [ { [RequestError: Incorrect syntax near the keyword 'SELECT'.] name: 'RequestError', message: 'Incorrect syntax near the keyword \'SELECT\'.', code: 'EREQUEST', number: 156, lineNumber: 1, state: 1, class: 15, serverName: 'localhost\\SQLEXPRESS', procName: '' } ] } success 

相同的查询正在SQL Server Management Studio中执行,它正在成功地将excel数据插入到数据库中.Excel表单数据如下所示:

 SalesPersonID TerritoryID -------- ----------- 275 2 276 4 277 3 

这里是plunker链接

我在代码中看到几个语法错误:

OPENROWSET示例代码是:

 FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=D:\testing.xlsx;HDR=YES', 'SELECT * FROM [Sheet1$]') 
  1. ExcelDatabase关键字,\'Excel 12.0\';\'Database=D:\\sample ...之间的额外代码中,需要更正

  2. SELECT SalesPersonID, TerritoryID FROM [SELECT_Example$]需要'之前和之后。

所以你的工作代码将是:

 request.query('INSERT INTO [mytable](SalesPersonID, TerritoryID)' + ' SELECT SalesPersonID, TerritoryID FROM OPENROWSET(' + '\'Microsoft.ACE.OLEDB.12.0\', \'Excel 12.0;Database=D:\\sample\\test\\data\\1540_OPENROWSET_Examples.xls;HDR=YES\', ' + '\'SELECT SalesPersonID, TerritoryID FROM [SELECT_Example$]\')',function(err,recordset){ if(err) console.log(err) 

更新:

OP收到此configuration错误:

链接服务器“(null)”的OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”报告了错误。

要修复configuration错误,需要执行以下脚本:

 USE [master] GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 GO