我正在使用mssql在 Express 应用程序中查询数据库。
我的代码是:
router.get('/expedientes', function (req, res, next) {
request.input('pageSize', sql.Int, parseInt(req.query.page_size));
request.query('SELECT TOP (@pageSize) * FROM expedientes', function (err, result) {
if (err) console.log(err)
res.send(result.recordset);
});
});
我想在 route 添加“order dy”功能。 我已经尝试过(没有运气)这个:
router.get('/expedientes', function (req, res, next) {
request.input('pageSize', sql.Int, parseInt(req.query.page_size));
request.input('orderBy', sql.Text, req.query.order_by);
request.input('orderDir', sql.Text, req.query.order_dir);
request.query('SELECT TOP (@pageSize) * FROM expedientes ORDER BY (@orderBy) (@orderDir)', function (err, result) {
if (err) console.log(err)
res.send(result.recordset);
});
});
如何在不使用字符串连接的情况下做到这一点?文档并不清楚此功能。
最佳答案
您可以使用CASE
:
SELECT TOP (@pageSize) *
FROM expedientes
ORDER BY CASE
WHEN @OrderBy = 'col1' AND @orderDir = 'ASC' THEN col1
--all columns in THEN part should have the same datatype
WHEN @OrderBy = 'col2' AND @orderDir = 'ASC' THEN col2
-- ...
END,
CASE
WHEN @OrderBy = 'col1' AND @orderDir = 'DESC' THEN col1
--should have the same datatype
WHEN @OrderBy = 'col2' AND @orderDir = 'DESC' THEN col2
-- ...
END DESC
--OPTION(RECOMPILE); -- to avoid expressions in final execution plan
<强> DBFiddle Demo
关于sql-server - 动态设置 ORDER BY,无需字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50112129/