sql - 如何在 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 )
解决方案
这种语法明显更简单,并且允许过滤多个列。大型表上的性能可能不会很好。
thequery1 = thequery1 + ' and country in (SELECT value FROM STRING_SPLIT(@field1,\',\')) '
.addParam("field1", TYPES.VarChar, field1)
推荐阅读
- bash - 使用 cat 从文件中将降价存储在变量中,以便在 gitlab-ci.yml 的 api 调用中扩展
- doctrine-orm - 通过 @Embedded 实体的属性使用 Doctrine Criteria 过滤集合
- mysql - 将数据从 kafka 复制到 mysql ,无法使用 DOcker 和 Debezium 连接到 JDBCSinkConnector
- java - 是否有任何选项可以使 getter 表达式更短?
- html - 为表格中单元格之间的空间着色
- python - Python 装饰类文档
- revit-api - 如果我使用 2 种不同类别的墙体结构材料,如何使用 revit api 为两个不同的层设置复合结构
- c# - 将 json 反序列化为列表时的空指针
- android - 如何在协调器布局中添加拉动刷新
- node.js - facebook graph api:将别人的页面订阅到我的应用程序