首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用节点js从相同的temp SQL表创建和读取

如何使用节点js从相同的temp SQL表创建和读取
EN

Stack Overflow用户
提问于 2018-02-16 21:00:30
回答 1查看 957关注 0票数 1

我正在尝试创建一个临时表,并使用节点js和mssql在同一个连接中读取表。

  • Query1:从不同的地方选择并创建'#mrpSalesHistory‘
  • Query2:截断实际表
  • Query3:将数据从'#mrpSalesHistory‘插入到真正的表中
  • Query4:从实表中选择计数
  • Query5:使用'#mrpSalesHistory‘作为源合并到实际表中
  • Query6:从实表中选择所有

代码片段:

代码语言:javascript
复制
sql.connect(config).then(function() {
    new sql.Request().batch(query1, (err, result) => {
        if(err){
            console.log('Q1');
            console.log(err);
        }
        console.log('Q1');
        console.log(result)
    })

}).then(function() {

    new sql.Request().batch(query2, (err, result) => {
        if(err){
            console.log('Q2');
            console.log(err);
        }
        console.log('Q2');
        console.log(result)
    })

}).then(function() {

    new sql.Request().batch(query3, (err, result) => {
        if(err){
            console.log('Q3');
            console.log(err);
        }
        console.log('Q3');
        console.log(result)
    })

}).then(function() {

    new sql.Request().batch(query4, (err, result) => {
        if(err){
            console.log('Q4');
            console.log(err);
        }
        console.log('Q4');
        console.log(result)
    })

}).then(function() {

    new sql.Request().batch(query5, (err, result) => {
        if(err){
            console.log('Q5');
            console.log(err);
        }
        console.log('Q5');
        console.log(result)
    })

}).then(function() {

    new sql.Request().batch(query6, (err, result) => {
        if(err){
            console.log('Q6');
            console.log(err);
        }
        console.log('Q6');
        console.log(result)
    })

}).catch(function(err) {

    console.log(err)
});

在运行下面的代码后,我得到

RequestError:无效的对象名'#mrpSalesHistory‘。第三次和第五次查询。

全日志输出:

代码语言:javascript
复制
Q3
{ RequestError: Invalid object name '#mrpSalesHistory'.
    at StreamEvents.req.once.err (C:\wamp64\www\mrp\updateNode\node_modules\mssql\lib\msnodesqlv8.js:532:17)
    at Object.onceWrapper (events.js:315:30)
    at emitOne (events.js:116:13)
    at StreamEvents.emit (events.js:211:7)
    at routeStatementError (C:\wamp64\www\mrp\updateNode\node_modules\msnodesqlv8\lib\reader.js:27:18)
    at C:\wamp64\www\mrp\updateNode\node_modules\msnodesqlv8\lib\reader.js:229:15
    at Object.cbFreeStatement [as end] (C:\wamp64\www\mrp\updateNode\node_modules\msnodesqlv8\lib\driver.js:202:9)
    at onInvoke (C:\wamp64\www\mrp\updateNode\node_modules\msnodesqlv8\lib\reader.js:228:26)
    at onQuery (C:\wamp64\www\mrp\updateNode\node_modules\msnodesqlv8\lib\driver.js:114:11)
  code: 'EREQUEST',
  number: 208,
  state: '42S02',
  originalError: { Error: [Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid object name '#mrpSalesHistory'. sqlstate: '42S02', code: 208 },
  name: 'RequestError' }
Q3
undefined
Q2
{ recordsets: [],
  recordset: undefined,
  output: {},
  rowsAffected: [ -1 ] }
Q5
{ RequestError: Invalid object name '#mrpSalesHistory'.
    at StreamEvents.req.once.err (C:\wamp64\www\mrp\updateNode\node_modules\mssql\lib\msnodesqlv8.js:532:17)
    at Object.onceWrapper (events.js:315:30)
    at emitOne (events.js:116:13)
    at StreamEvents.emit (events.js:211:7)
    at routeStatementError (C:\wamp64\www\mrp\updateNode\node_modules\msnodesqlv8\lib\reader.js:27:18)
    at C:\wamp64\www\mrp\updateNode\node_modules\msnodesqlv8\lib\reader.js:229:15
    at Object.cbFreeStatement [as end] (C:\wamp64\www\mrp\updateNode\node_modules\msnodesqlv8\lib\driver.js:202:9)
    at onInvoke (C:\wamp64\www\mrp\updateNode\node_modules\msnodesqlv8\lib\reader.js:228:26)
    at onQuery (C:\wamp64\www\mrp\updateNode\node_modules\msnodesqlv8\lib\driver.js:114:11)
  code: 'EREQUEST',
  number: 208,
  state: '42S02',
  originalError: { Error: [Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid object name '#mrpSalesHistory'. sqlstate: '42S02', code: 208 },
  name: 'RequestError' }
Q5
undefined
Q6
{ recordsets: [ [] ],
  recordset: [],
  output: {},
  rowsAffected: [] }
Q4
{ recordsets: [ [ [Object] ] ],
  recordset: [ { '': 0 } ],
  output: {},
  rowsAffected: [] }
Q1
{ recordsets: [],
  recordset: undefined,
  output: {},
  rowsAffected: [ 77938 ] }

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-28 11:37:24

每个new sql.Request().batch(调用都应该是return new sql.Request().batch(。你用的是承诺。你必须回报承诺,才能真正等待承诺的实现。在您的代码中真正发生的是,您正在快速地连续地启动所有这些sql请求,而不需要等待任何请求的完成,然后这些请求随着时间的推移被填满,没有保证的顺序。注意每个查询输出的随机序列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48834771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档