Node.js 如何处理通过节点项目中的`mssql`包传入字符串值

Node.js 如何处理通过节点项目中的`mssql`包传入字符串值,node.js,sql-server,Node.js,Sql Server,我正在使用节点项目中的mssql包来处理SQL Server数据库中的数据查询。我遇到了一个关于这个问题的挑战: const idArr = ['A123', 'B456']; SELECT DOCNO FROM dbo.SA30301 WHERE DOCNO IN (${idArr}) 问题是,使用这种语法,即使数组包含字符串值,值也不会作为字符串传递。因此,在这个实现中,我得到了一个无效列名错误 我也试过: SELECT DOCNO FROM dbo.SA30301 WHERE DOCN

我正在使用节点项目中的
mssql
包来处理SQL Server数据库中的数据查询。我遇到了一个关于这个问题的挑战:

const idArr = ['A123', 'B456'];

SELECT DOCNO
FROM dbo.SA30301
WHERE DOCNO
IN (${idArr})
问题是,使用这种语法,即使数组包含字符串值,值也不会作为字符串传递。因此,在这个实现中,我得到了一个
无效列名
错误

我也试过:

SELECT DOCNO
FROM dbo.SA30301
WHERE DOCNO
IN ('${idArr}')
。。。虽然这不会出错,但不会返回任何记录,因为基本上这两个值都作为一个长字符串传入

另外,仅供参考,SQL Server中的
DOCNO
类型为
char(17)

所以我的问题是,如何确保这些值作为单个字符串值进行计算


我的另一个选择可能是使用for循环并逐个执行,但这将导致对数据库的多次点击,而不仅仅是一次点击。

尝试使用Javascript的join函数

SELECT DOCNO
FROM dbo.SA30301
WHERE DOCNO
IN (${idArr.map(item => `'${item}'`).join(',')})

您可能需要避开引号。

我建议您用一个示例来编辑您的问题,说明您所说的“单个字符串”是什么意思。我已经编辑了我的答案。每个项目前后的报价将使它,所以你会得到“A123”,“B456”不错的一个!我对您的答案做了一个小编辑,因为在SQLServer中,这些必须是单引号,而不是双引号。但除此之外,这是完美的!