【发布时间】:2019-06-16 15:57:06
【问题描述】:
我正在使用 node-mssql 并从 docker 连接到 2017 sql 服务器。
问题
在我的脚本中,我已经把
var test = await dbRequest().batch("SELECT * FROM #myTestTable");
间歇性地,我收到错误RequestError: Invalid object name '#myTempTable'。所以我在我的 sql.ConnectionPool 上放了一些手表来确定是什么情况导致了错误。结果在大多数执行行中,pool.pool.available 变量为 1,如下所示。
每当发生错误时,在进入下一行之前,pool.pool.available 将为 0,因此:
如果在运行前立即发生这种情况
var test = await dbRequest().batch("SELECT * FROM #myTestTable");
它会失败
RequestError: Invalid object name '#myTempTable'
我的尝试
我尝试使用{min: 100, max: 1000, log: true} 将池配置发送到 Tedious,但不幸的是它似乎被忽略了 (https://www.npmjs.com/package/mssql#connection-pools)
var sqlServerProperty = {
user: '',
password: '',
server: '192.168.1.13',
database: 'CCTDB',
pool: {min: 1,
max: 100,
idleTimeoutMillis: 30000}
};
我还尝试了一个 pool.request() 并从中运行所有 dbRequests。没有骰子!
任何帮助表示赞赏!
dbRequest() 是什么样的?
// the entire script is wrapped in an async function
var pool = new sql.ConnectionPool(sqlServerProperty);
await pool.connect();
var dbRequest = ( () => { return pool.request() });
【问题讨论】:
-
您好,您尝试过其他表吗?所以对于我的 # 表来说,是 MsSQL 上临时表的标识符。
-
是的,但它不适合用例
-
该错误消息只是初始会话(或连接)已关闭并开始新会话的标志。临时表具有会话的生命周期。为了解决此问题,请确保您的逻辑可以保留打开的连接,直到不再需要 #temp 表
标签: node.js sql-server temp-tables tedious