Jas*_*son 5 sql-server temp-tables node.js tedious
我正在使用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'
我尝试过的
我曾尝试通过将池配置发送到Tedious {min: 100, max: 1000, log: true},但不幸的是,它似乎被忽略了(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}
};
Run Code Online (Sandbox Code Playgroud)
我还尝试了一个pool.request()并从中运行所有dbRequest。没有骰子!
任何帮助表示赞赏!
dbRequest()是什么样的?
// the entire script is wrapped in an async function
var pool = new sql.ConnectionPool(sqlServerProperty);
await pool.connect();
var dbRequest = ( () => { return pool.request() });
Run Code Online (Sandbox Code Playgroud)
该错误消息仅表示初始会话(或连接)已关闭并且新会话已开始。临时表具有会话的生存期。为了解决此问题,请确保您的逻辑可以保留打开的连接,直到不再需要#temp表为止
我不是nodejs的专家,但是快速研究发现:
有一种明确的方法-只需将pool.min选项设置为1 (或更高)来初始化Connection 。这意味着,池中必须至少有一个活动连接。较高的数字表示更多的并发活动连接。
您是否尝试过类似的方法?:
pool: {min: 20,
max: 100,
idleTimeoutMillis: 30000}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,将建立更多的连接,因此在某个时间点可以使用更多的连接,并减少了会话被其他人使用而关闭的机会。
| 归档时间: |
|
| 查看次数: |
416 次 |
| 最近记录: |