node.js - 数组作为sql请求参数
问题描述
我像这样处理我的 SQL 查询(有效):
const sql = require("mssql/msnodesqlv8");
const conn = new sql.ConnectionPool({
database: "MyDatabase",
server: "localhost\\SQLEXPRESS",
driver: "msnodesqlv8",
options: {
trustedConnection: true
}
});
async function runSQLQuery(insertReq, query) {
try {
await conn.connect();
var result = await insertReq.query(query);
await conn.close();
return result;
} catch (ex) {
console.log(ex);
return undefined;
} finally {
if (conn.connected)
conn.close();
}
}
并创建这样的查询(也可以):
exports.getClientByID = async function (ID) {
var insertReq = conn.request();
insertReq.input("ID", sql.UniqueIdentifier, ID);
const request = await runSQLQuery(insertReq, `SELECT TOP (1) * FROM ${ClientTabel} WHERE ID = @ID`);
return request.recordset[0]
};
但现在我想像这样添加一个数组作为参数(这不起作用):
exports.getUsersWithProperty = async function (properties) {
var insertReq = conn.request();
insertReq.input("properties", sql.NVarChar, properties);
const request = await runSQLQuery(insertReq, `SELECT * FROM ${ClientTabel} WHERE Property IN @properties`);
return request.recordset;
};
但是有了这个我只得到一个
请求错误”“@properties”附近的错误语法。
我猜类型sql.NVarChar
是错误的,但我不知道正确的类型是什么。这有什么解决办法?
解决方案
好的,首先,您需要在值周围添加括号。
IN 子句是这样的:
WHERE somecolumn IN ('value1','value2','value3')
您还必须确保在完成@properties 字符串替换后,您最终会得到一个类似于上述子句的语句,并且引号和逗号位于正确的位置。
或者,如果 @properties 是像 Value1、Value2、Value3 等这样的字符串,您可以将其传递给 T-SQL 表值函数,该函数返回如下表:
WHERE somecolumn IN dbo.ExtractStringList(@StringList)
推荐阅读
- javascript - 没有 jquery 的 django 错误 ajax CSRF 令牌丢失或不正确
- python - 训练不断停止。元组错误。(Tensorflow Object_detection API)
- swift - 如何在 Mac 上实现 VoiceOver 的accessibilityCustomActions?
- jenkins - Jenkins 从站设置因私钥身份验证而失败
- javascript - JavaScript 函数式编程:如何处理 fetch(对于管道)
- python - 附加 Numpy 数组
- javascript - Javascript数组和正确的anwser问题
- python - 如何训练 CNN 解码多长度验证码
- sqlite - sqlite 是否支持在 DELETE 子句中加入 JOIN?
- for-loop - 如何处理迭代器的类型?