2009-11-16 32 views

Respuesta

6

Siempre se puede tratar de utilizar una tabla temporal con una columna de identidad

DECLARE @table TABLE(
     [id] INT IDENTITY(1,1), 
     Val VARCHAR(10) 
) 

DECLARE @TableFrom TABLE(
     Val VARCHAR(10) 
) 
INSERT INTO @TableFrom (Val) SELECT 'A' 
INSERT INTO @TableFrom (Val) SELECT 'B' 
INSERT INTO @TableFrom (Val) SELECT 'C' 
INSERT INTO @TableFrom (Val) SELECT 'D' 

INSERT INTO @table (Val) SELECT * FROM @TableFrom ORDER BY Val DESC 
SELECT * FROM @table 

Algunos de los mejores paginación que he visto en SQL Server 2000 utiliza este patrón

DECLARE @PageStart INT, 
     @PageEnd INT 

SELECT @PageStart = 51, 
     @PageEnd = 100 

SELECT <TABLE>.* 
FROM (
      SELECT TOP (@PageStart - 1) 
        <ID> 
      FROM (
         SELECT TOP (@PageEnd) 
           <ID> 
         FROM TABLE 
         ORDER BY <ID> ASC 
        ) SUB 
      ORDER BY SUB.<ID> DESC 
     ) SUB INNER JOIN 
     <TABLE> ON SUB.<ID> = <TABLE>.<ID> 
ORDER BY SUB.<ID> 
+0

excepción, esto no es una tabla temporal, sino una variable de tabla, y que no son de apoyo 200 o bien – Andomar

+0

Tener un vistazo a esto http : //support.microsoft.com/kb/305977 –

+0

+1 agradable. ¡Aquí está mi voto popular! – Andomar

0

Podría explicar cómo el a continuación la consulta resolverá el problema?

SELECT (SELECCIONAR SUM (1)

DE specimen_source_ref

DONDE specimen_source_rcd < = reg.specimen_source_rcd

) AS 'Número de fila'

, *

DE specimen_source_ref reg

+0

Esto le dará el recuento del número de elementos menor o igual que el elemento actual de la lista, pero no le dará la row_number único, si hay elementos duplcate –

3

Otra forma de crear una tabla temporal con una identidad de usar:

SELECT Field1, Field2, IDENTITY(int, 1,1) AS MyID 
INTO #Temp 
FROM Table1 
Cuestiones relacionadas