【问题标题】:How to update a specific row where ID, and an auto increment column are involve如何更新涉及 ID 和自动增量列的特定行
【发布时间】:2019-01-31 02:27:53
【问题描述】:

我有一个 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 数字。

【问题讨论】:

  • WHERE EntryID = 31 ???
  • entryID 是一个自动增量
  • 你怎么知道你想更新第 1 行?您似乎想更新第 3 行。
  • 我有一个文本框,我可以在其中选择可以更新的 ID,但我无法弄清楚如何更新涉及 entryID 的 ID 例如我有 5 个条目,其中 ID 为 28,因此 entryID 是增量示例(1,2,3,4,5) 但都具有相同的 ID 号
  • ikd 如果你理解的话。我也解释不清楚对不起

标签: sql .net sql-server


【解决方案1】:

你能试试下面的查询吗?

这用于更新 entryID 的MAX 值。

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

这用于更新 MIN 的 entryID 值。

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

【讨论】:

    【解决方案2】:

    我希望,您可能正在寻找可以通过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
    

    Rextester here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-19
      • 2021-03-03
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多