Массив как параметр запроса sql - PullRequest
0 голосов
/ 14 октября 2019

Я обрабатываю свои 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 неправильный, но я не знаю, что это за правильный тип. Какое решение для этого?

1 Ответ

0 голосов
/ 14 октября 2019

ОК, для начала вам нужно добавить скобки вокруг значений.

Предложение IN выглядит следующим образом:

WHERE somecolumn IN ('value1','value2','value3')

вам также необходимо убедиться, что после замены строки @properties вы получите оператор, который выглядит какВыше, с кавычками и запятыми в нужных местах.

В качестве альтернативы, если @properties является строкой типа Value1, Value2, Value3 и т. д., вы можете передать ее в табличную функцию T-SQLкоторый возвращает таблицу как это:

WHERE somecolumn IN dbo.ExtractStringList(@StringList)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...