I am trying to create a temp table and read from it in the same connection using node js and mssql.
- Query1: Selects from a bunch of different places and creates '#mrpSalesHistory'
- Query2: Truncates the real table
- Query3: Inserts the the data from '#mrpSalesHistory' to the real table
- Query4: Selects count from the real table
- Query5: Merges into the real table using '#mrpSalesHistory' as source
- Query6: Selects All from real table
Code Snip:
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)
});
After running the following code I get
RequestError: Invalid object name '#mrpSalesHistory'. on the 3rd and 5th query.
Full log output:
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 ] }
Thank you.
sql.Requestis a separate session (I assume this is the case but I'm not an expert in node) then the temp tables won't exist between calls. Is there a specific reason that this can't all be done in a single query? Or can you combine them into a single batch?request.multiple = true. But i'm not sure where to put it.