2009-11-16 110 views

回答

6

你总是可以尝试使用临时表与标识列

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 

一些我在SQL Server 2000中见过的最好的分页使用此模式

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

除此之外,这不是一个临时表,但表变量,它们不是在200或者 – Andomar 2009-11-16 13:12:17

+0

看一看这个HTTP支持://support.microsoft.com/kb/305977 – 2009-11-16 13:14:04

+0

+1不错。那么我的upvote呢! – Andomar 2009-11-16 13:16:39

0

你能否详细说明如何下面的查询会解决问题吗?

SELECT(SELECT SUM(1)

FROM specimen_source_ref

WHERE specimen_source_rcd < = reg.specimen_source_rcd

)AS '行号'

,*

FROM specimen_source_ref代码

+0

这会给你一个小于或等于列表中当前项目的项数的计数,但如果有重复的项目将不会给你唯一的row_number – 2009-11-16 13:22:57

3

另一种方式来创建一个身份临时表使用方法:

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