首页 > 解决方案 > 节点 Mssql 模块错误:RequestError:将数据类型 nvarchar 转换为 bigint 时出错

问题描述

当我尝试使用此查询时,我在节点 js 上使用 mssql 模块:

 const search = await mssql.query`SELECT
    numpis,
    datadm,
    r006esc.nomesc
  FROM
    r034fun
    join r006esc on (r006esc.codesc = r034fun.codesc)
  WHERE
    CONCAT(numcad, '-', tipcol, '-', numemp) = (
      SELECT
        TOP 1 CONCAT(numcad, '-', tipcol, '-', numemp)
      FROM
        r034fun as tbl2
      WHERE
        tbl2.numpis = r034fun.numpis
      ORDER BY
        datadm DESC
    )
    AND NUMPIS IN(${pisString});`

它返回错误:

RequestError:将数据类型 nvarchar 转换为 bigint 时出错。

但是当我在一个 SQL 编辑器中运行时,比如beekeper,它可以完美运行。

查询时使用的 pisString:

let pisString = ``
    await object.forEach((element, index) => {
      if (index !== object.length - 1) pisString += `${element.numpis},`
      else pisString += `${element.numpis}`
    })

有什么帮助吗?预先感谢。

标签: javascriptnode.jssql-serverdatabase

解决方案


我发现问题出在哪里,要在 IN 语句中找到许多值,我必须传递一个值数组,而不是像我正在做的那样传递[123, 456, 789]一个字符串。123, 456, 789mssql 模块将字符串作为单个值而不是多个值读取。


推荐阅读