¿Es válida la paginación basada en los procedimientos almacenados del sistema sp_cursoropen, sp_cursororfetch y sp_cursorclose?
Si desea paginar, puede utilizar el siguiente método:
ALTER PROC sp_PageView: un procedimiento almacenado de paginación universal implementado por TOP n
@tbname sysname, - - El nombre de la tabla que se va a paginar
@FieldKey nvarchar(1000), -- Clave principal (la clave para ubicar el registro), utilizada para ubicar el campo de clave principal (clave única) del registro, que puede ser varios campos separados por comas
@PageCurrent int=1, -- el número de página que se mostrará
@PageSize int=10, -- el tamaño de cada página (número de registros)
@FieldShow nvarchar(1000)='', -- Nombres de tablas separados por comas, mostrados durante la paginación
@FieldShow nvarchar(1000)= '', -- Nombres de tablas separados por comas, mostrados con Mostrado en paginación
@FieldKey nvarchar(1000), - usado para ubicar registros, - usado para ubicar registros, - usado para mostrar registros.
-- Una lista de campos separados por comas para mostrar, o todos los campos si no se especifican
@FieldOrder nvarchar(1000)='', -- Una lista de campos separados por comas para ordenar, ok Especifique DESC /ASC después del campo para especificar el orden de clasificación
@Where nvarchar(1000)='', --condiciones de consulta
@PageCount int SALIDA --Número total de páginas p>
p>
AS
ESTABLECER NOCOUNT ON
--Compruebe si el objeto es válido
SI OBJECT_ID(@tbname) ES NULL
BEGIN
RAISERROR(N'El objeto "%s" no existe', 1,16,@tbname)
RETURN
END
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
BEGIN
RAISERROR(N'"%s" no es una tabla, vista o función con valores de tabla ',1,16,@tbname)
RETURN
END
--Comprobación del campo de paginación
IF ISNULL(@FieldKey, N'')=''
BEGIN
RAISERROR(N'El procesamiento de paginación requiere una clave primaria (o clave única)', 1,16)
RETURN
END
--Otras comprobaciones y especificaciones de parámetros
ISNULL(@PageCurrent,0) <1 SET @ PageCurrent =1
IF ISNULL(@PageSize,0) <1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N ''*'
SI ES NULL( @FieldOrder,N'')=N''
SET @FieldOrder=N''
ELSE
SET @FieldOrder=N' ORDER BY '+LTRIM(@FieldOrder)
IF ISNULL(@Where.N'')=N''
SET @Where =N''
ELSE
SET @Where=N'WHERE ('+@Where+N')'
--Si @PageCount es un Valor NULL, calcula el número total de páginas (diseñado así. El propósito es que solo puedas calcular el número total de páginas la primera vez y luego en llamadas posteriores.
En llamadas posteriores, el número total de páginas se devolverá al procedimiento almacenado para evitar calcular el número total de páginas nuevamente. Esto está diseñado para aquellos que no desean calcular el número total de páginas. para calcular el número total de páginas, puede asignar un valor a @PageCount )
IF @PageCount IS NULL
BEGIN
DECLARE @sql nvarchar(. 4000)
SET @sql nvarchar(4000)
SET @sqlnvarchar(4000)
SET @sql nvarchar(4000)
SET @sql=N'SELECT @PageCount=COUNT(*)' p>
+N'FROM '+@tbname
+N''+@Dónde
EXEC sp_executesql @sql, N'@PageCount int SALIDA', @PageCount SALIDA
SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
END
-- Calcular el valor de TOPN para la visualización de paginación
DECLARAR @TopN varchar(20),@TopN1 varchar(20)
SELECT @TopN=@PageSize,
@TopN1=(@PageCurrent-1)*@PageSize
--Muestra directamente la primera página
IF @ PageCurrent=1
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' '+@Dónde
+N' '+@FieldOrder )
ELSE
BEGIN
--Manejo de alias
IF @FieldShow=N'*'
SET @FieldShow=N'a.*'
--Generar condiciones de procesamiento de clave primaria (clave única)
DECLARAR @Dónde1 nvarchar(4000),@Dónde2 nvarchar(4000),
@s nvarchar(1000),@Campo nombre del sistema
SELECCIONAR @Dónde1=N'', @Where2=N'',@s=@FieldKey
MIENTRAS CHARINDEX(N',',@s)>0
SELECT @Field=LEFT(@s,CHARINDEX (N',',@s)-1),
@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
@Dónde1=@Dónde1+N' AND a.'+@Campo+ N'=b.'+@Campo,
@Dónde2=@Dónde2+N' Y b.'+@Campo +N' ES NULO',
@Dónde=REPLACE (@Dónde,@Campo N'a.'+@Campo),
@FieldOrder=REPLACE(@FieldOrder,@ Campo,N'a.'+@Campo),
@FieldShow=REPLACE(@FieldShow,@Campo,N'a.'+@ Campo)
SELECT @Dónde= REEMPLAZAR(@Dónde,@s,N'a.'+@s), <
/p>
@FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),
@FieldShow=REPLACE(@FieldShow,@s,N'a.' +@s),
@Where1=STUFF(@Donde1+N' AND a.'+@s+N'=b.'+@s,1,5,N''),
@Dónde2=CASE
CUANDO @Dónde=' ' ENTONCES N'DÓNDE ('
ELSE @Dónde+N' AND ('
END+N'b.'+@s+N' IS NULL'+@Where2+N')'
--Ejecutar consulta
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM'+@tbname
+N' a UNIRSE A LA IZQUIERDA (SELECCIONAR ARRIBA ' +@TopN1
+N' '+@FieldKey
+N' FROM'+@tbname
+N'a '+@Dónde
+N' '+@FieldOrder
+N')b ON '+@Dónde1
+N' '+@Dónde2
+ N' '+@FieldOrder)
END
/*
declara @PageCount int
exec sp_PageView
SA_Order,
iId,
5,
50,
'iId,dDate,cVouchId',--separados por comas Una lista de campos que se mostrarán; si no se especifica, se muestran todos los campos
iId, - Una lista de campos de clasificación separados por comas, se puede especificar DESC/ASC después del campo para especificar el orden de clasificación
'', - condiciones de consulta
@PageCount
*/
GO