spGetPagedSQL
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PKFieldName | nvarchar(250) | IN | |
@CKFields | nvarchar(250) | IN | |
@SelectClause | nvarchar(4000) | IN | |
@FromClause | nvarchar(4000) | IN | |
@WhereClause | nvarchar(4000) | IN | |
@OrderByClause | nvarchar(500) | IN | |
@ResultsPerPage | int | IN | |
@CurrentPage | int | INOUT | |
@RowCount | int | INOUT | |
@Distinct | bit | IN | |
@USEGUIDID | bit | IN | |
@SELECTALLIDS | bit | IN | |
@SELECTALL | bit | IN |
Definition
Copy
CREATE procedure [dbo].[spGetPagedSQL]
(
@PKFieldName nvarchar(250),
@CKFields nvarchar(250),
@SelectClause nvarchar(4000),
@FromClause nvarchar(4000),
@WhereClause nvarchar(4000),
@OrderByClause nvarchar(500),
@ResultsPerPage int,
@CurrentPage int output,
@RowCount int output,
@Distinct bit=0,
@USEGUIDID bit = 0,
@SELECTALLIDS bit = 0,
@SELECTALL bit = 0
)
as
begin
declare @sqlString nvarchar(max);
if @SELECTALL = 1
begin
set @sqlString = 'SELECT '
if @Distinct = 1
begin
set @sqlString = @sqlString + 'DISTINCT '
end
if len(@PKFieldName) > 0
set @sqlString = @sqlString+@SelectClause + ', ' + @PKFieldName+' from '+@FromClause
else
set @sqlString = @sqlString+@SelectClause + ', ' + @CKFields+' from '+@FromClause
if Len(@WhereClause)>0 set @sqlString=@sqlString+' where '+@WhereClause
if @Distinct = 0
begin
if Len(@OrderByClause)>0 set @sqlString=@sqlString+' order by '+@OrderByClause
end
EXECUTE(@sqlString);
end
else
begin
declare @FirstIndex int
declare @LastIndex int
declare @NumPages int
create table #PagedSQLList(
ListID int identity (1, 1) not null,
PKID int,
CKID nvarchar(64)
)
if @USEGUIDID = 1
begin
alter table #PagedSQLList
drop column PKID
alter table #PagedSQLList
add PKID uniqueidentifier
end
set @sqlString = 'SELECT '
if @Distinct = 1
begin
set @sqlString = @sqlString + 'DISTINCT '
end
if len(@PKFieldName) > 0
set @sqlString = @sqlString+@PKFieldName+' from '+@FromClause
else
set @sqlString = @sqlString+@CKFields+' from '+@FromClause
if Len(@WhereClause)>0 set @sqlString=@sqlString+' where '+@WhereClause
if @Distinct = 0
begin
if Len(@OrderByClause)>0 set @sqlString=@sqlString+' order by '+@OrderByClause
end
if @SELECTALLIDS = 1
begin
EXECUTE(@sqlString);
end
else
begin
if len(@PKFieldName) > 0
begin
EXECUTE ('insert #PagedSQLList(PKID) ' + @sqlString)
set @RowCount=@@Rowcount
CREATE NONCLUSTERED INDEX [IX_TEMP] ON #PagedSQLList(ListID, PKID)
end
else
begin
EXECUTE ('insert #PagedSQLList(CKID) ' + @sqlString)
set @RowCount=@@Rowcount
end
if @ResultsPerPage<1 set @ResultsPerPage=1
-- determine number of pages
set @NumPages = @RowCount/@ResultsPerPage
if ((@RowCount%@ResultsPerPage) > 0) set @NumPages = @NumPages + 1
if (@CurrentPage = 0) set @CurrentPage=1
else if (@CurrentPage <= -1) set @CurrentPage=@NumPages
else if (@CurrentPage > @NumPages) set @CurrentPage=@NumPages
set @FirstIndex=((@CurrentPage-1)*@ResultsPerPage)+1
set @LastIndex=@FirstIndex+@ResultsPerPage-1
set @sqlString = 'SELECT '
if @Distinct = 1
begin
set @sqlString = @sqlString + 'DISTINCT '
end
declare @sqlStringFrom nvarchar(max)
if len(@PKFieldName) > 0
begin
set @sqlString = @sqlString +@SelectClause+', P.PKID FROM '
set @sqlStringFrom = @FromClause+' JOIN #PagedSQLList P ON P.PKID='+@PKFieldName+' WHERE P.ListID BETWEEN ' + CAST(@FirstIndex as char)+' AND '+CAST(@LastIndex as char)
end
else
begin
set @sqlString = @sqlString +@SelectClause+', P.CKID FROM '
set @sqlStringFrom = @FromClause+' JOIN #PagedSQLList P ON P.CKID='+@CKFields+' WHERE P.ListID BETWEEN '+CAST(@FirstIndex as char)+' AND '+CAST(@LastIndex as char)
end
declare @sqlStringWhere nvarchar(max)
set @sqlStringWhere = ''
if Len(@WhereClause)>0 set @sqlStringWhere=' AND '+@WhereClause
declare @sqlStringOrder nvarchar(max)
set @sqlStringOrder = ''
if Len(@OrderByClause)>0 set @sqlStringOrder=' ORDER BY '+@OrderByClause
EXECUTE (@sqlString + @sqlStringFrom + @sqlStringWhere + @sqlStringOrder);
end
end
END