2009-11-16 4 views

Antwort

6

Sie können immer versuchen, eine temporäre Tabelle

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 

einige der besten Paging mit einer Identitätsspalte zu verwenden i in SQL Server 2000 gesehen haben, verwendet dieses Muster

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

Außer, ist dies nicht eine temporäre Tabelle, sondern eine Tabellenvariable, und sie sind nicht unterstützen in 200 entweder – Andomar

+0

einen Blick auf dieser http : //support.microsoft.com/kb/305977 –

+0

+1 schön. Hier ist mein upvote dann! – Andomar

0

Sie das näher erläutern konnte, wie die Unterfrage löst das Problem?

SELECT (SELECT SUM (1)

FROM specimen_source_ref

WHERE specimen_source_rcd < = reg.specimen_source_rcd

) AS 'Row Number'

, *

FROM probe_quelle_ref reg

+0

Dadurch erhalten Sie die Anzahl der Elemente, die kleiner oder gleich dem aktuellen Element in der Liste sind. Sie erhalten jedoch keine eindeutige Zeilennummer, wenn doppelte Elemente vorhanden sind –

3

Eine weitere Möglichkeit, eine temporäre Tabelle mit einer Identität zu erstellen zu verwenden:

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