在我的SQL查询中获取记录ID

8

我有一个简单的存储过程可以返回记录:

Select empID, EmpFirstName, EmpLastName from EMPLOYEES  

返回的结果为:
    EmpID         EmpFirstName       EmpLastName  
    -----         ------------       -----------  
   30152          John               Smith  
   30114          Tom                Jones  
   56332          Steve              Williams  
   85442          Paul               Johnson  

我需要的是:

 RecID       EmpID         EmpFirstName       EmpLastName  
 -----       -----         ------------       -----------  
 1      30152          John               Smith  
 2      30114          Tom                Jones  
 3      56332          Steve              Williams  
 4      85442          Paul               Johnson  

如何获取recordID列?

谢谢。


选择 RecID、empID、EmpFirstName 和 EmpLastName 从 EMPLOYEES。你的数据库结构是什么? - Steve Robbins
1
分配RecID的顺序是由什么决定的?按EmpID排序,30114将具有RecID = 1。那有关系吗? - Mikael Eriksson
记录的“ID”(即存储在数据库中可确切识别记录的某个值)和行号之间存在差异(行号只是一个任意数字,如果再次运行查询,则不一定会识别相同的行)。您需要哪一个? - Chains
3个回答

6

可能需要使用Row_Number函数:

Select ROW_NUMBER() OVER(ORDER BY empID) AS RecId, 
       empID, 
       EmpFirstName, 
       EmpLastName 
from EMPLOYEES 

除非在EMPLOYEES表中实际存在一个RecId列,否则它只会是这样:

Select RecId, 
       empID, 
       EmpFirstName, 
       EmpLastName 
from EMPLOYEES 

好的,那很有效。假设没有empID,我应该使用什么作为“Order By”? - DNR
3
您可以在其中使用任何其他列。 - Abe Miessler

3
如果您使用的是至少SQL Server 2005,ROW_NUMBER 是您需要的。
示例:
Select
    row_number() over (order by empID) as RecID,
    empID, 
    EmpFirstName, 
    EmpLastName
from 
    EMPLOYEES

如果你正在使用SQL Server 2000或更早版本,那么很遗憾,这并不容易。
SQL Server 2000不支持ROW_NUMBER,但是有一些变通方法可以实现类似的功能。
然而,所有这些方法似乎都有一些缺点

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接