小编Vat*_*cNZ的帖子

你如何按参数排序?

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

基本上,我有一个 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
查看次数