Red de conocimiento informático - Material del sitio web - Cómo utilizar vc ado para conectarse a Sql Server2005 para implementar procedimientos almacenados de paginación

Cómo utilizar vc ado para conectarse a Sql Server2005 para implementar procedimientos almacenados de paginación

ELIMINAR PROCEDIMIENTO SI EXISTE (SELECCIONAR * DE dbo.sysobjects DONDE ID = OBJECT _ ID(N '[Proc _ Util _ Page]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)

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

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

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,