SQL Server 2005存储过程分页排序设置列名为变量

来源:百度知道 编辑:UC知道 时间:2024/05/31 07:56:39
Create proc GetPaged
@SortType varchar,--列名
@CategoryId int,--类型ID
@startpage int,--启始页 0
@pagesize int--显示多少个
as
select * from
(
select Id,Title,Author,PublishDate,ISBN,UnitPrice,CategoryId,Clicks,row_number() over(order by @SortType asc) as rankid from books where CategoryId=@CategoryId
)as books where rankId>@startpage*@pagesize and rankId<=@startpage*@pagesize+@pagesize

exec GetPaged2 UnitPrice,1,0,100

想按列名排序把列名写成一个变量 但是写成变量后就不能排序了直接写列名就能排序 不解 呵呵本人新手 希望各位解答一下
也就是说 row_number() over(order by @SortType asc) 这里是使用@SortType varchar,--列名 这里需要用 UnitPrice单价 或 PublishDate 日期 来排序

用字符串的方式来做,先生成查询字符串,然后执行
/*******************************************************************************
Author : Richard.Cai
CreateDate : 2008-12-22
UpdateDate : 2008-12-25
Amendment History:
Update by $$$$$$$$$$$ 2008/12/25 : Alter content.
*******************************************************************************/

ALTER PROCEDURE [dbo].[USP_AT_MR_SearchClient]
(
@PageSize INT = 10 --The size per page
,@PageStart INT = 0 --The page start,not contain this no..
,@WhereStr NVARCHAR(MAX) = '' --For example:' AND ClientName like '%AS%''
,@DebugFlag BIT = 0
)
AS
DECLARE @TableName NVARCHAR(255) --Only a table name
DECLARE @FieldName NVARCHAR(255) --Field name that data is unique.
DECLARE @sSQL NVARCHAR(MAX)
DECLARE @sTMP NVARCHAR(MAX)
DECLARE @sOrderBy NVARCHAR(255)

/*Generate Paging Data*/
SELECT @sSQL=N'SELECT &