首页 > 解决方案 > 如何在 Tedious 中运行 sql 查询,为 sql in 运算符提供多个值?

问题描述

如果我只提供一个参数,下面的代码就可以工作。如果我从下拉列表中选择德国和墨西哥,尽管表中存在数据,但查询不会返回任何内容

前端的代码。通过 AJAX jQuery .post 发送参数

$('select').selectpicker();
var field1 = $('#field1').val();
$.post('data.js', {
    field1: field1
})

app.js 服务器端:

app.post('/data.js', function(req, res) {

    var thequery1 = `SELECT top 10 country
                        ,[ Sales] sales 
                        ,[Units Sold] as sold
                        ,FORMAT( Date, 'dd/MM/yyyy', 'en-US' ) thedate
                     FROM easternsun.dbo.financial
                     where 1 = 1`
    if (req.body.field1) {
        thequery1 = thequery1 + ' and country in (@field1)'
    }
});
Promise.all([queryTablewithPararams(thequery1, req.body.field1)])
        .then(
            data => res.json(data)

        );

function queryTablewithPararams(thequery1, field1) {
    return new Promise(function(resolve, reject) {
        var con = new msSqlConnecter.msSqlConnecter(config);
        con.connect().then(function() {
            new con.Request(thequery1)
                .addParam("field1", TYPES.VarChar, field1 )
                .onComplate(function(count, datas) {
                    resolve(datas);
                }).onError(function(err) {
                    console.log(err);
                }).Run();
        }).catch(function(ex) {
            console.log(ex);
        });
    });
}

我的下拉列表的 HTML 代码:

<select id="field1" class="selectpicker form-control" multiple >
    <option value="Canada">Canada</option>
    <option value="Germany">Germany</option>
    <option value="France">France</option>
    <option value="Mexico">Mexico</option>
</select>

我确信我需要在这条线上添加一些东西,但我不知道是什么。

.addParam("field1", TYPES.VarChar, field1 )

标签: sqlnode.jssql-servertediousjs

解决方案


这种语法明显更简单,并且允许过滤多个列。大型表上的性能可能不会很好。

thequery1 = thequery1 + ' and country in (SELECT value FROM STRING_SPLIT(@field1,\',\')) '



.addParam("field1", TYPES.VarChar, field1)

推荐阅读