Cómo utilizar vc ado para conectarse a Sql Server2005 para implementar procedimientos almacenados de paginación
dbo . Página de utilidad de procedimiento
Ir
/*
Marcar número de página
Método de llamada: exec proc_util_page' país, ciudad', ' table ', ' donde 1 = 1 ', ' ordenar por midasc ', ' mid ', 1, 0, ''
Entrada:
1.Field( No puede estar vacío )
2. Nombre de la tabla (no puede estar vacía)
3. Condición (puede estar vacía si es necesario)
4. base de clasificación, requiere caracteres asc y desc)
5. Clave principal (puede estar vacía)
6. Número de página actual
7. en la página
8. Muestra el número total de registros (si
9. Muestra la declaración SQL
Devuelve: conjunto de registros
* /
Crear proceso dbo.Página de utilidad de proceso
(
@sField nvarchar(1000),
@stablenvarchar( 1000 ),
@ SW donde nvarchar(1000),
@sOrderby nvarchar(1000),
@sPkey nvarchar(50),
@iPageIndex int,
@iPageSize int,
@iRecordCount int salida,
@sOutsql nvarchar(4000) salida
)
-Cifrado
Como
INICIO
ESTABLECER NOCOUNT ON
Estado @iRC int, @ sSQL nvarchar(4000), @sW nvarchar(1000), @sOB nvarchar(1000), @sT nvarchar(100)
SELECT @iRC = @iRecordCount, @sSQL = ' ', @sW = ' Entre ellos 1=1 ', @sOB = ' '
-Condición de juicio
IF RTRIM(@ SW donde) = ' 'y @ sWhere no está vacío
Inicio
SET @ sW = ' '+@ sW donde+' '
Fin
-Juzga el número total de registros
IF @ iRC & lt1
INICIO
SET @ sSQL = ' SELECT @ iRC = Count(*)FROM '+@ sTable+@ sW
EXEC sp_executesql @sSQL , N'@iRC int OUT ', @iRC OUT
End
: determina si el número de páginas excede el rango.
SELECCIONE @iPageIndex =(CASO CUANDO @iRC<(@iPageIndex-1)* @iPageSize ENTONCES TECHO(@iRC/@iPageSize)CUANDO @iPageIndex<1th EN 1 ELSE@iPageIndex END)
-Juez de clasificación
¡IF RTRIM(@sOrderby)! = ' ' y @sOrderby no está vacío
Inicio
SELECT @sOB=' ' + @sOrderby +' '
Fin
-Si es la primera página
IF @iPageIndex=1
Inicio
SET @ sSQL = ' SELECT TOP '+CAST(@ IP agesize AS nvarchar )+' '+@ sField+' FROM '+@ sTable+@ sW+@ sOB
Vaya al paso 4
Fin
-Vea si hay un clave primaria.
Si RTRIM(@sPkey) = "" o @sPkey está vacío
Vaya al paso 1
Otro
-Ver si Ordenar por clave principal.
Inicio
ESTADO @sOB1 nvarchar(1000), @sPkey1 nvarchar(50)
SELECCIONAR @sob 1 = SUPERIOR(@sOrderby), @sPkey1 = SUPERIOR(@sPkey)
IF CHARINDEX(@sPkey1 + 'ASC',@sob 1)>0
INICIO
SET @sT = ' & gt(Seleccione máximo('
Ir al paso 2
Fin
IF char index(@ sp key 1+' desc ',@ sob 1 )> ;0
Inicio
SET @ sT = ' & lt(Seleccione mínimo ('
Ir al paso 2
Fin p>
Ir al paso 3
Fin
-Si no hay clave principal
Paso 1:
Iniciar
SET @ sSQL = ' SELECT TOP '+CAST(@ IP agesize AS nvarchar)+' '+@ sField+' FROM '+@ sTable+@ sW+' y existe (SELECT TOP '+CAST((@ iPageIndex -1)* @ IP agesize AS nvarchar)+' '+' '+@ sField+' FROM '+@ sTable+@ sW+@ sOB+'+@ sOB+')
Vaya al paso 4
Fin
: ordenar solo por clave principal.
Paso 2:
Iniciar
SET @ sSQL = ' SELECT TOP '+CAST(@ IP agesize AS nvarchar)+' '+@ sField+' FROM '+@ sTable+@ sW+' y '+@ sPkey+@ sT+@ sPkey+')FROM(SELECT TOP '+CAST((@ iPageIndex-1)* @ IP agesize AS nvarchar)+' '+@ sPkey+' FROM '+ @ sTable+@ sw+@ sOB+')AS TB temp)'+@ sOB
Ir al paso 4
Fin
-Impuro, ordenar por clave principal
Fin
-Impuro, ordenar por clave principal p>
Paso 3:
Inicio
SET @ sSQL = ' SELECT '+@ sField+' FROM '+@ sTable+@ sw+' y '+@ sPkey+' IN( SELECCIONE ARRIBA '+CAST(@ iPageSize AS nvarchar)+' '+@ sPkey+' DE '+@ sTable+@ sW+' Y '+@ sPkey+' NO EN(SELECT TOP '+CAST((@ iPageIndex-1)* @ iPageSize AS nvarchar)+' '+' '+@ sPkey+' FROM '+@ sTable+@ sw+'
Vaya al paso 4
Fin
- Genere el instrucción SQL de paginación final ejecutada y ejecútela
Paso 4:
SELECT @sOutsql = @sSQL, @iRecordCount = @iRC
-Imprimir ( @sSQL)
EXEC(@sSQL)
SET NOCOUNT OFF
END
GO
-Llamar al procedimiento almacenado de paginación
Declarar @iRecordCount int,
@sOutsql nvarchar(4000)
EXEC Proc_Util_Page 'campo,campo,campo','nombre de tabla', ' donde 1 = 1 ', ' ordenar por ID ASC ', ' ID ', 1, 10, @irecordcountoutput,