【问题标题】:node mssql temp table lost - RequestError: Invalid object name '#myTempTable'节点 mssql 临时表丢失 - RequestError: Invalid object name '#myTempTable'
【发布时间】: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


【解决方案1】:

该错误消息只是初始会话(或连接)已关闭并开始新会话的标志。临时表具有会话的生命周期。为了解决此问题,请确保您的逻辑可以保留打开的连接,直到不再需要 #temp 表

我不是 nodejs 专家,但快research 告诉:

有一个明确的方法 - 只需初始化 Connection pool.min 选项设置为 1 (或更高)。这意味着,必须有 池中至少有一个活动连接。更高的数字意味着更多 并发活动连接。

你有没有尝试过类似的东西?:

pool: {min: 20, 
        max: 100, 
        idleTimeoutMillis: 30000}

在这种情况下,将建立更多连接,因此在某个时间点有更多可用连接,并且您的会话因被其他人使用而关闭的机会将减少

【讨论】:

  • 感谢 Alex,感谢您的回复。我的池是 1(根据问题)。我现在用 20 来测试一下。
【解决方案2】:

为了确保一个系列中的所有批次都在同一个连接下执行,您还可以使用事务:https://www.npmjs.com/package/mssql#transaction

请注意,事务在提交之前会锁定记录,这可能会导致数据库阻塞。

【讨论】:

    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    相关资源
    最近更新 更多