【问题标题】:Getting a recordID in my SQL select query在我的 SQL 选择查询中获取记录 ID
【发布时间】:2011-10-23 15:31:40
【问题描述】:

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

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

谢谢

【问题讨论】:

  • Select RecID, empID, EmpFirstName, EmpLastName from EMPLOYEES ?您的数据库的结构是什么?
  • 什么决定了 RecID 的分配顺序?按 EmpID 排序,30114 的 RecID = 1。这有关系吗?
  • 记录“ID”(即存储在您的数据库中的某个值可以肯定地标识一条记录)和行号(它只是一个不一定标识记录的任意数字)之间存在差异如果您再次运行查询,则在同一行。)您想要的是哪一个?

标签: sql sql-server stored-procedures select


【解决方案1】:

如果您至少使用 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,不过。

【讨论】:

    【解决方案2】:

    大概想用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”?
    • 您可以使用其中的任何其他列。
    【解决方案3】:
    SELECT 
        ROW_NUMBER() OVER(ORDER BY empID) as RowId, 
        empID, 
        EmpFirstName, 
        EmpLastName 
    FROM EMPLOYEES 
    

    More details on ROW_NUMBER()

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 2021-01-10
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多