如何更新ID和自动递增列所涉及的特定行

时间:2019-01-31 02:27:54

标签: sql .net sql-server

我有一个SQL Server表,其中第1列是entryID,第2列是ID;我需要更新特定行。

例如,我有3行:

  • 第1行包含(entryID = 31,ID = 28),
  • 第2行包含(entryID = 32,ID = 29),
  • 第3行包含(entryID = 33,ID = 28)

我需要更新第1行。如何更新特定行?

我使用下面的代码,但是我无法更新第1行,而是更新第3行

UPDATE Attendance 
SET TimeOUT = @TimeOUT,
    Time = @Time
WHERE ID = @ID 
  AND entryID = (SELECT MAX(entryID) FROM Attendance)

我需要更新第1行,但我总是更新最高的entryID号。

2 个答案:

答案 0 :(得分:0)

我希望您可能正在寻找可以通过ROW_NUMBER

完成的操作

假设您的“行号”基于ROW1中的值顺序,则以下查询将适用于任何提供的行号。

;WITH CTE AS
(
    SELECT  entryID, 
            id,
            TimeOUT,
            Time, 
            ROW_NUMBER() OVER (ORDER BY entryID) AS RNK
    FROM Attendance
)
UPDATE CTE
SET TimeOUT = @TimeOUT, Time = @Time
WHERE RNK = 2 -- your rownumber

上个月here

答案 1 :(得分:0)

您可以尝试以下查询吗?

这用于更新entryID的MAX值。

 UPDATE Attendance set
      TimeOUT = @TimeOUT, Time = @Time
    WHERE ID = @ID and entryID = (SELECT TOP 1 MAX(entryID) FROM Attendance)

这用于更新entryID的MIN值。

 UPDATE Attendance set
      TimeOUT = @TimeOUT, Time = @Time
    WHERE ID = @ID and entryID = (SELECT TOP 1 MIN(entryID) FROM Attendance)