我正在使用以下代码:
ALTER PROCEDURE [dbo].[usp_get_all_groups]
-- Add the parameters for the stored procedure here
@pStartIndex smallint,
@pPageSize tinyint,
@pOrderBy varchar
AS
BEGIN
SELECT
*
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY
CASE WHEN @pOrderBy='GroupId ASC' THEN UserGroups._id + ' ASC'
WHEN @pOrderBy='GroupId DESC' THEN UserGroups._id + ' DESC'
WHEN @pOrderBy='GroupCode ASC' THEN UserGroups.GroupCode + ' ASC'
WHEN @pOrderBy='GroupCode DESC' THEN UserGroups.GroupCode + ' DESC'
END
) AS Row, * FROM UserGroups)
AS StudentsWithRowNumbers
WHERE Row>= @pStartIndex AND Row <= @pStartIndex + @pPageSize
END
当我使用以下命令执行存储的proc时
DECLARE @return_value int
EXEC @return_value = [dbo].[usp_get_all_groups]
@pStartIndex = 0,
@pPageSize = 15,
@pOrderBy = N'GroupCode ASC'
SELECT 'Return Value' = @return_value
我得到的结果没有排序。
Row _id GroupCode Description Type IsActive
1 1 CS2009 CS 2009 Batch S 1
2 2 IT2009 IT 2009 Batch S 1
3 3 ME2009 ME 2009 Batch S 1
4 4 EC2009 EC 2009 Batch S 1
5 5 EE2009 EE 2009 Batch S 1
6 8 CS_F CS Faculties F 1
7 9 IT_F IT Faculties F 1
8 10 ME_F ME Faculties F 1
9 11 EC_F EC Faculties F 1
10 12 EE_F EE Faculties F 1
11 13 BSC_F Basic Science Faculties F 1
12 14 Accounts Accounts A 1
13 15 Mgmt Management M 1
14 16 Lib Library B 1
15 17 TnP Training & Placement T 1
你能告诉我还有什么要求吗?
我已经尝试过了,但是这也给了飞机未分类的结果:
SELECT
GroupTable._id,
GroupTable.GroupCode,
GroupTable.Type,
GroupTable.Description
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY
CASE WHEN @pOrderBy='GroupId ASC' THEN CONVERT(varchar(20), '_id ASC')
WHEN @pOrderBy='GroupId DESC' THEN CONVERT(varchar(20), '_id DESC')
WHEN @pOrderBy='GroupCode ASC' THEN CONVERT(varchar(20), @pOrderBy)
WHEN @pOrderBy='GroupCode DESC' THEN CONVERT(varchar(20), @pOrderBy)
END
) AS Row, * FROM UserGroups)
AS GroupTable
WHERE Row>= @pStartIndex AND Row <= @pStartIndex + @pPageSize
Select COUNT(*) as TotalRows from UserGroups where IsActive= 1
以此替换您的过程:
ALTER PROCEDURE [dbo].[usp_get_all_groups]
-- Add the parameters for the stored procedure here
@pStartIndex smallint,
@pPageSize tinyint,
@pOrderBy varchar(15)
AS
BEGIN
SELECT *
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY
CASE WHEN @pOrderBy='GroupId ASC' THEN UserGroups._id END ASC,
CASE WHEN @pOrderBy='GroupId DESC' THEN UserGroups._id END DESC,
CASE WHEN @pOrderBy='GroupCode ASC' THEN UserGroups.GroupCode END ASC,
CASE WHEN @pOrderBy='GroupCode DESC' THEN UserGroups.GroupCode END DESC) AS Row,
* FROM UserGroups) AS StudentsWithRowNumbers
WHERE Row>= @pStartIndex AND Row <= @pStartIndex + @pPageSize
ORDER BY Row
END
您不能为非动态表达式动态分配asc和desc。
主要内容:示例Transact SQL 中的存储过程用于一次又一次地节省编写代码的时间。它通过将过程存储在数据库中并通过传递参数来获得所需的输出来实现这一点。 语法: 下面是存储过程创建的语法 - 参数可选:当我们创建一个过程时,一个或多个参数被传递到过程中。存储过程中有3种类型的参数: IN - 过程可以引用参数。该过程将覆盖参数的值。 OUT- 过程不能引用参数,但过程会覆盖参数值。 IN OUT- 参数被
第一wp_query后WordPress分页不工作。我正在对第一个wp_query对象返回的数据执行一些操作。但是在第二次查询之后,分页不起作用。 我尝试从其中一个查询中删除“paged”参数,该参数要么给出错误的结果,要么没有分页。例如,此查询第一次返回28个结果,但第二次查询后仅返回6个结果。如果我从第一个查询中删除'paged'参数并将其添加到第二个查询中,那么当它应该返回3页时,只返回一页
问题内容: 我们正在从SQL Server 2005升级到2008。几乎将2005实例中的每个数据库都设置为2000兼容模式,但是我们正在跳至2008。我们的测试已经完成,但是我们了解到,我们需要获取更快。 我发现了一些存储过程,这些存储过程要么从丢失的表中选择数据,要么尝试对不存在的列进行ORDER BY列。 包装SQL以在SET PARSEONLY ON中创建过程,并在try / catch中
问题内容: 如何在常规SQL查询中结合执行存储过程以及使用其结果或参数? 例如,我想执行以下操作: 等等。 问题答案: 不,您需要使用临时表 那你就可以加入 如果您不知道该过程的列和数据类型,则可以使用以下出色答案:将存储过程的结果插入临时表中 简而言之,它用于将存储过程执行到动态创建的#temp表中,而无需命名和了解所有列的类型。
问题内容: 我正在尝试添加分页存储过程的排序功能。 我该怎么做,到目前为止,我已经创建了这个。它工作正常,但是当传递参数时,它不起作用。 问题答案: 一种方法(可能不是最好的方法)是使用动态SQL 这是 SQLFiddle 演示
本文向大家介绍SQL Server 分页查询通用存储过程(只做分页查询用),包括了SQL Server 分页查询通用存储过程(只做分页查询用)的使用技巧和注意事项,需要的朋友参考一下 自开始做项目以来,一直在用。这段存储过程的的原创者(SORRY,忘记名字了),写得这段SQL代码很不错,我在这个基础上,按照我的习惯以及思维方式,调整了代码,只做分页查询用。 调用方法: prcPageResult