PROZEDUR ERSTELLEN GoalerPageSp
@IntPageSize int,
@IntCurrPage int,
@strFields nvarchar(2000),
@strTable varchar(200),
@strWhere varchar(800),
@strOrderType varchar(200),
@strKeyField varchar(50)
ALS
NOCOUNT EINSTELLEN
DECLARE @tmpSQL nvarchar(4000) – Dynamische SQL-Anweisungen für den Speicher
DECLARE @tmpWhere varchar(800)
DECLARE @tmpAndWhere varchar(800) – wird für Abfragebedingungen auf Seite N (>1) verwendet
DECLARE @tmpOrder varchar(200)
DECLARE @tmpD_X varchar(2)
DECLARE @tmpMin_MAX varchar(3)
--Bedingungen festlegen--
IF @strWhere IS NULL OR RTRIM(@strWhere)=''
BEGIN – Keine Abfragebedingungen
SET @tmpWhere=''
SET @tmpAndWhere=''
ENDE
ANDERS
BEGIN – Es gibt Abfragebedingungen
SET @tmpWhere=' WHERE '+@strWhere
SET @tmpAndWhere=' AND '+@strWhere
ENDE
--Sortierung festlegen--
IF @strOrderType != 0
BEGIN – umgekehrte Reihenfolge
SET @tmpD_X = '<'
SET @tmpMin_MAX = 'MIN'
SET @tmpOrder=' ORDER BY ' +@strKeyField+ ' DESC'
ENDE
ANDERS
BEGINNEN
SET @tmpD_X = '>'
SET @tmpMin_MAX = 'MAX'
SET @tmpOrder=' ORDER BY ' +@strKeyField+ ' ASC'
ENDE
--SQL-Abfrage--
WENN @IntCurrPage=1
Setze @tmpSQL='SELECT TOP '+CAST(@IntPageSize AS VARCHAR)+' '+@strFields+' FROM '+@strTable+' '+@tmpWhere+' '+@tmpOrder
ANDERS
SET @tmpSQL='SELECT TOP '+CAST(@IntPageSize AS VARCHAR)+' '+@strFields+' FROM '+@strTable+' WHERE ('+@strKeyField+' '+@tmpD_X+' (SELECT '+@tmpMin_MAX+'(' +@strKeyField+') FROM (SELECT TOP '+CAST(@IntPageSize*(@IntCurrPage-1) AS VARCHAR)+' '+@strKeyField+' FROM '+@strTable+' '+@tmpWhere+' '+@tmpOrder+') AS T))'+@tmpAndWhere+' ' +@tmpOrder
EXEC(@tmpSQL)
GEHEN
Aufrufmethode:
IntPageSize=20
strTable= [TableName] 'Datentabellenname
strFields= Field1,Field2,Field3,Field4 'Die zu lesenden Spaltennamen
strKeyField=Feld1'Primärschlüssel: Hier wird davon ausgegangen, dass Feld1 der Primärschlüssel ist
strWhere='Bedingung: FieldA='b'
strOrderType=1'Sortiermethode: 1 ist umgekehrte Reihenfolge, 0 ist sequentielle Reihenfolge
CurrPage=Request.QueryString(Seite)
IF(CurrPage<> And Isnumeric(CurrPage))DANN
CurrPage=CLNG(CurrPage)
IF(CurrPage<1)THEN CurrPage=1
ANDERS
CurrPage=1
ENDE WENN
WENN strWhere<> DANN
tmpWhere= WHERE &strWhere
ANDERS
tmpWhere=
ENDE WENN
IF(SESSION(RecCount)<>)THEN
IF(SESSION(strWhere)<>strWhere)THEN
RecCount=Conn.Execute(SELECT COUNT(&strKeyField&) FROM &strTable&tmpWhere)(0)
SESSION(RecCount)=RecCount
SESSION(strWhere)=strWhere
ANDERS
RecCount=SESSION(RecCount)
ENDE WENN
ANDERS
RecCount=Conn.Execute(SELECT COUNT(*) FROM &strTable&tmpWhere)(0)
SESSION(RecCount)=RecCount
SESSION(strWhere)=strWhere
ENDE WENN
IF(RecCount MOD IntPageSize <>0)THEN
IntPageCount=INT(RecCount/IntPageSize)+1
ANDERS
IntPageCount=RecCount/IntPageSize
ENDE WENN
SET Cmd=Server.CreateObject(Adodb.Command)
Cmd.CommandType=4
SET Cmd.ActiveConnection=Verbindung
Cmd.CommandText=GoalerPageSp
Cmd.Parameters.Append Cmd.CreateParameter(@IntPageSize,4,1,4,IntPageSize)
Cmd.Parameters.Append Cmd.CreateParameter(@IntCurrPage,4,1,4,CurrPage)
Cmd.Parameters.Append Cmd.CreateParameter(@strFields,200,1,2000,strFields)
Cmd.Parameters.Append Cmd.CreateParameter(@strTable,200,1,200,strTable)
Cmd.Parameters.Append Cmd.CreateParameter(@strWhere,200,1,800,strWhere)
Cmd.Parameters.Append Cmd.CreateParameter(@strOrderType,4,1,4,strOrderType)
Cmd.Parameters.Append Cmd.CreateParameter(@strKeyField,200,1,50,strKeyField)
SET RS=Cmd.Execute()
WENN RecCount<1 DANN
Response.Write (kein Datensatz)
ANDERS
GetRecord=RS.GetRows(IntPageSize)
Für i=0 bis Ubound(GetRecord,2)
Response.Write(GetRecord(0,i),GetRecord(1,i),GetRecord(2,i))'...Inhalt ausgeben
NÄCHSTE
GetRecord=Null
ENDE WENN
SETZE RS=NICHT
Hilfreiche Freunde, bitte debuggen Sie es selbst. Die gesamten Datensätze werden mit ASP abgerufen und in SESSION gespeichert. Wenn Sie die gesamten Datensätze abrufen möchten, ist dies natürlich sehr zeitaufwändig Gespeicherte Prozedur. Es ist auch möglich, die Gesamtzahl der Seiten aufzuzeichnen und zurückzugeben. Der folgende Code ist:
--Ermitteln Sie die Gesamtzahl der Datensätze--
SET @tmpSQL='SELECT @getRecordCounts=COUNT('+@strKeyField+') FROM '+@strTable+@tmpWhere
EXEC sp_executesql @tmpSQL,N'@getRecordCounts int output',@getRecordCounts OUTPUT
--Ermitteln Sie die Gesamtzahl der Seiten--
SET @tempFolatNumber=@getRecordCounts%@IntPageSize
IF @getRecordCounts<=@IntPageSize
SET @getPageCounts=1
ANDERS
BEGINNEN
WENN @tempFolatNumber != 0
SET @getPageCounts=(@getRecordCounts/@IntPageSize)+1
ANDERS
SET @getPageCounts=(@getRecordCounts/@IntPageSize)
ENDE
Vergessen Sie nicht, die Definitionsparameter zurückzugeben:
@getRecordCounts int Ausgabe,--Gesamtzahl der Datensätze zurückgeben
@getPageCounts int Ausgabe – gibt die Gesamtzahl der Seiten zurück