/*设定排序语句.*/ IF CHARINDEX("DESC",@Sort)>0 BEGIN SET @strSortColumn = REPLACE(@Sort, "DESC", "") SET @operator = "<=" END ELSE BEGIN IF CHARINDEX("ASC", @Sort) = 0 SET @strSortColumn = REPLACE(@Sort, "ASC", "") SET @operator = ">=" END
IF CHARINDEX(".", @strSortColumn) > 0 BEGIN SET @SortTable = SUBSTRING(@strSortColumn, 0, CHARINDEX(".",@strSortColumn)) SET @SortName = SUBSTRING(@strSortColumn, CHARINDEX(".",@strSortColumn) + 1, LEN(@strSortColumn)) END ELSE BEGIN SET @SortTable = @Tables SET @SortName = @strSortColumn END
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) + ")"
/*默认当前页*/ IF @CurrentPage < 1 SET @CurrentPage = 1
/*设置分页参数.*/ SET @strPageSize = CAST(@PageSize AS varchar(50)) SET @strStartRow = CAST(((@CurrentPage - 1)*@PageSize + 1) AS varchar(50))
/*筛选以及分组语句.*/ IF @Filter IS NOT NULL AND @Filter != "" BEGIN SET @strFilter = " WHERE " + @Filter + " " SET @strSimpleFilter = " AND " + @Filter + " " END ELSE BEGIN SET @strSimpleFilter = "" SET @strFilter = "" END IF @Group IS NOT NULL AND @Group != "" SET @strGroup = " GROUP BY " + @Group + " " ELSE SET @strGroup = ""
/*执行查询语句*/ EXEC( " DECLARE @SortColumn " + @type + " SET ROWCOUNT " + @strStartRow + " SELECT @SortColumn=" + @strSortColumn + " FROM " + @Tables + @strFilter + " " + @strGroup + " ORDER BY " + @Sort + " SET ROWCOUNT " + @strPageSize + " SELECT " + @Fields + " FROM " + @Tables + " WHERE " + @strSortColumn + @operator + " @SortColumn " + @strSimpleFilter + " " + @strGroup + " ORDER BY " + @Sort + " " ) GO