2011-08-09 61 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,但。