2009-11-16 22 views

risposta

6

Si può sempre provare ad utilizzare una tabella temporanea con una colonna di identità

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 

Alcuni dei migliori di paging che abbia mai visto in SQL Server 2000 utilizza questo schema

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

Tranne, questo non è una tabella temporanea, ma una variabile di tabella, e non sono il supporto a 200 o – Andomar

+0

Date un'occhiata a questo http : //support.microsoft.com/kb/305977 –

+0

+1 nice. Ecco il mio upvote allora! – Andomar

0

Potrebbe elaborare come il sotto la query risolverà il problema?

SELEZIONA (SELECT SUM (1)

DA specimen_source_ref

DOVE specimen_source_rcd < = reg.specimen_source_rcd

) AS 'Numero Row'

, *

DA specimen_source_ref reg

+0

Questo ti darà il conteggio del numero di elementi più piccoli o uguali all'elemento corrente nell'elenco, ma non ti darà lo row_number univoco, se ci sono elementi duplcate –

3

Un altro modo per creare una tabella temporanea con un'identità da utilizzare:

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