相关疑难解决方法(0)

你如何按参数排序?

只是想知道我是否可以就我正在运行的存储过程征求一些反馈,以及是否有更有效的方法来处理这种情况(我很确定会有!)。

基本上,我有一个 SP,我调用它来返回可能具有一个或多个状态和排序顺序的记录(作业)列表(我使用 RowNum 进行分页)。目前我正在使用 WITH RECOMPILE,因为状态的变化可能一直在变化(取决于用户等)。还有一些过滤正在进行。

我正在使用 IF 语句来运行相同的代码,唯一的变化是排序顺序。

我想我的问题是:有没有更好的方法来做到这一点(对于不同的状态可能有不同的 SP)?由于缺乏知识,我是否使事情变得过于复杂(很可能) SP 实际上还可以,但需要进行细微调整以减少行数?

我在下面粘贴了 SP 的一部分 - 与完整代码的唯一区别是不同排序顺序的附加 IF 语句......

我很感激任何反馈。

提前致谢!

PROCEDURE [dbo].[sp_Jobs] 

@PageNumber int, 
@PageSize int, 
@FilterExpression varchar(500), 
@OrderBy varchar(50), 
@CustomerID int, 
@ShowNotSet bit, 
@ShowPlaced bit, 
@ShowProofed bit, 
@ShowReProofed bit, 
@ShowApproved bit, 
@ShowOnTime bit, 
@ShowLate bit, 
@ShowProblem bit, 
@ShowCompleted bit, 
@ShowDispatched bit, 
@ShowUnapproved bit, 
@ShowClosed bit, 
@ShowReturned bit, 
@UserID int

WITH RECOMPILE 

AS

--JobNumber DESC 
if @OrderBy='JobNumberDESC' 
BEGIN 

WITH Keys AS (SELECT TOP (@PageNumber * @PageSize) ROW_NUMBER() …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 stored-procedures

16
推荐指数
1
解决办法
3万
查看次数

ORDER BY CASE 表达式出现“转换失败”错误

我有以下存储过程,当我将“OrderBy”设置为“OrderNumber”时,该过程非常有效。

我收到以下错误:将 nvarchar 值“SK11270”转换为数据类型 int 时转换失败。

(SK11270 是 OrderNumber 列中的一个值,即 nvarchar(50))

如果我对任何其他 OrderBy 列运行相同的查询,它工作正常。

我完全迷失了,我的头很痛。任何人都可以看到会导致此问题的任何明显内容吗?

提前感谢您的任何想法...

富有的

这有效:

sp_jobs '1','20','','JobNumber','ASC','97','True','True','True','True','True','True','True','True','True','False','True','False','True','False','0'

这不会:
sp_jobs '1','20','','OrderNumber','ASC','97','True','True','True','True','True','True','True','True','True','False','True','False','True','False','0'

PROCEDURE [dbo].[sp_Jobs] 

@PageNumber int,
@PageSize int,
@FilterExpression varchar(500),
@OrderBy varchar(50),
@OrderDirection varchar(50),
@CustomerID int,
@ShowNotSet bit,
@ShowPlaced bit,
@ShowProofed bit,
@ShowReProofed bit,
@ShowApproved bit,
@ShowOnTime bit,
@ShowLate bit,
@ShowProblem bit,
@ShowCompleted bit,
@ShowDispatched bit,
@ShowUnapproved bit,
@ShowClosed bit,
@ShowReturned bit,
@ShowNoStock bit,
@UserID int

WITH RECOMPILE 

AS

BEGIN
WITH    Keys 
AS (SELECT TOP (@PageNumber * @PageSize) ROW_NUMBER() …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures

10
推荐指数
2
解决办法
7167
查看次数

具有多列和不同排序选项的 CASE ORDER BY

我试图CASE ORDER BY在存储过程中使用 T-SQL,在其中我将 @OrderBy 参数作为 TINYINT 传递。

  • @Orderby = 1 Then Date column should be ASC
  • @Orderby = 2 Then Date column should be DESC

我的问题是:当我为该参数传递 2 时,如何让日期列对 desc 进行排序,并在同一个 CASE ORDER BY 语句中将字符串列按 asc 排序?

这就是我现在所拥有的 CASE ORDER BY

    ORDER BY 
    CASE WHEN @OrderBy = 1 THEN CONVERT(NVARCHAR(30) , ccd.CertEndDate) + tp.LastName + tp.FirstName END ,
    CASE WHEN @OrderBy = 2 THEN CONVERT(NVARCHAR(30) , ccd.CertEndDate) + tp.LastName + tp.FirstName END DESC
Run Code Online (Sandbox Code Playgroud)

此代码解析并返回一个结果集没有错误,但第二个 CASE ORDER BY 都是 …

stored-procedures order-by t-sql case

6
推荐指数
2
解决办法
4万
查看次数

在 ORDER BY 中使用 CASE .. END 有意义吗?

类似SELECT * FROM t ORDER BY case when _parameter='a' then column_a end, case when _parameter='b' then column_b end的查询是可能的,但是:这是一个好习惯吗?

在查询的 WHERE 部分使用参数是很常见的,在 SELECT 部分有一些计算列,但参数化 ORDER BY 子句并不常见。

假设我们有一个列出二手车的应用程序 (à la CraigsList)。汽车列表可以按价格或颜色排序。我们有一个函数,给定一定数量的参数(比如价格范围、颜色和排序标准),它会返回一组带有结果的记录。

为了具体起见,让我们假设cars都在下表中:

CREATE TABLE cars
(
  car_id serial NOT NULL PRIMARY KEY,  /* arbitrary anonymous key */
  make text NOT NULL,       /* unnormalized, for the sake of simplicity */
  model text NOT NULL,      /* unnormalized, for the sake of simplicity */
  year integer,             /* may …
Run Code Online (Sandbox Code Playgroud)

postgresql order-by dynamic-sql functions postgresql-9.6

6
推荐指数
1
解决办法
9741
查看次数