<div class="codetitle"><a style="CURSOR: pointer" data="77569" class="copybut" id="copybut77569" onclick="doCopy('code77569')"> 代码如下:<div class="codebody" id="code77569"> SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO ALTER PROCEDURE usp_PagingLarge @TableNames VARCHAR(200),--表名,可以是多个表,但不能用别名 @PrimaryKey VARCHAR(100),--主键,可以为空,但@Order为空时该值不能为空 @Fields VARCHAR(200),--要取出的字段,可以是多个表的字段,可以为空,为空表示select @PageSize INT,--每页记录数 @CurrentPage INT,--当前页,0表示第1页 @Filter VARCHAR(200) = '',--条件,可以为空,不用填 where @Group VARCHAR(200) = '',--分组依据,可以为空,不用填 group by @Order VARCHAR(200) = '' --排序,可以为空,为空默认按主键升序排列,不用填 order by AS BEGIN DECLARE @SortColumn VARCHAR(200) DECLARE @Operator CHAR(2) DECLARE @SortTable VARCHAR(200) DECLARE @SortName VARCHAR(200) IF @Fields = '' SET @Fields = '' IF @Filter = '' SET @Filter = 'WHERE 1=1' ELSE SET @Filter = 'WHERE ' + @Filter IF @Group <>'' SET @Group = 'GROUP BY ' + @Group IF @Order <> '' BEGIN DECLARE @pos1 INT,@pos2 INT SET @Order = REPLACE(REPLACE(@Order,' asc',' ASC'),' desc',' DESC') IF CHARINDEX(' DESC',@Order) > 0 IF CHARINDEX(' ASC',@Order) > 0 BEGIN IF CHARINDEX(' DESC',@Order) < CHARINDEX(' ASC',@Order) SET @Operator = '<=' ELSE SET @Operator = '>=' END ELSE SET @Operator = '<=' ELSE SET @Operator = '>=' SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order,' ASC',''),' DESC',' ','') SET @pos1 = CHARINDEX(',',@SortColumn) IF @pos1 > 0 SET @SortColumn = SUBSTRING(@SortColumn,1,@pos1-1) SET @pos2 = CHARINDEX('.',@SortColumn) IF @pos2 > 0 BEGIN SET @SortTable = SUBSTRING(@SortColumn,@pos2-1) IF @pos1 > 0 SET @SortName = SUBSTRING(@SortColumn,@pos2+1,@pos1-@pos2-1) ELSE SET @SortName = SUBSTRING(@SortColumn,LEN(@SortColumn)-@pos2) END ELSE BEGIN SET @SortTable = @TableNames SET @SortName = @SortColumn END END ELSE BEGIN SET @SortColumn = @PrimaryKey SET @SortTable = @TableNames SET @SortName = @SortColumn SET @Order = @SortColumn SET @Operator = '>=' END DECLARE @type varchar(50) DECLARE @prec int SELECT @type=t.name,@prec=c.prec FROM sysobjects o JOIN syscolumns c on o.id=c.id JOIN systypes t on c.xusertype=t.xusertype WHERE o.name = @SortTable AND c.name = @SortName IF CHARINDEX('char',@type) > 0 SET @type = @type + '(' + CAST(@prec AS varchar) + ')' DECLARE @TopRows INT SET @TopRows = @PageSize * @CurrentPage + 1 PRINT @type DECLARE @sql NVARCHAR(4000) SET @Sql = 'DECLARE @SortColumnBegin ' + @type + ' SET ROWCOUNT ' + Cast(@TopRows as VARCHAR(10))+ ' SELECT @SortColumnBegin=' + @SortColumn + ' FROM ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + ' SET ROWCOUNT ' + CAST(@PageSize AS VARCHAR(10)) + ' SELECT ' + @Fields + ' FROM ' + @TableNames + ' ' + @Filter + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + ISNULL(@Group,'') + ' ORDER BY ' + @Order + '' -- Print(@sql) Exec(@sql) END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|