sql-server - 动态设置 ORDER BY,无需字符串连接

标签 sql-server node.js tsql

我正在使用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/

相关文章:

php - 连接mssql后utf-8无法插入mysql

sql-server - SQL Server VARCHAR(MAX) 和数据库大小非常高

c# - ExecuteNonQuery() 无法创建临时表 Sql Server

sql - 使用 TOP 和 WHERE 更新一行

使用日期转换时,SQL 输出仅获取最近 7 天的输出

sql-server - SQL触发器执行问题

node.js - NestJS TypeORM 可选查询不起作用

javascript - 如何使用 intern/web 驱动程序等待所有重定向完成?

javascript - node-zookeeper-client getData 仅执行回调一次

sql - 没有指定排序依据时,SELECT TOP如何工作?