2011-08-09 23 views
8

我有一个简单的存储过程返回记录:获得一个的recordId在我的SQL SELECT查询

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列?

感谢

+0

'选择RecID,EMPID,EmpFirstName,EmpLastName从EMPLOYEES'?你的数据库的结构是什么? –

+1

什么是确定分配RecID的顺序?按EmpID排序,30114的RecID = 1。这很重要吗? –

+0

记录“ID”(即存储在数据库中的某些值可以正确标识记录)和行号(只是一个任意数字,如果运行查询时不一定标识同一行)之间存在差异再次。)你想要什么? – Chains

回答

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 
+0

什么是empIDDESC? – DotNetRookie

+0

Typo,我继续前进并更新。 –

+0

好的,这有效。可以说,如果没有empID,我会用什么作为“Order By”? – DotNetRookie

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,但有一些workarounds可以实现类似的功能。
All of them seem to have some drawbacks,但。