是否可以使用sql在update语句中使用MAX?

use*_*332 5 t-sql sql-server

我想在sql语句中使用MAX函数.这是我想要做的:这样的事情:

UPDATE MainTable
        SET [Date] = GETDATE()

        where [ID] = Max
Run Code Online (Sandbox Code Playgroud)

我知道这是错误的,特别是我把where条件但是无法弄清楚如何在同一语句中使用max和update.谢谢

zer*_*kms 20

UPDATE MainTable
   SET [Date] = GETDATE()
 where [ID] = (SELECT MAX([ID]) FROM MainTable)
Run Code Online (Sandbox Code Playgroud)


SQL*_*ace 5

单程

DECLARE @MaxID INT = (select MAX(id) FROM MainTable)

UPDATE MainTable
        SET [Date] = GETDATE()
        where [ID] = @MaxID
Run Code Online (Sandbox Code Playgroud)

那就是SQL 2008语法,在2005年你需要分两步完成变量的声明和赋值

您还可以使用公用表表达式

;WITH cte
AS (
SELECT TOP 1 * FROM MainTable
ORDER BY ID DESC

)

UPDATE cte SET [Date] = GETDATE()
Run Code Online (Sandbox Code Playgroud)

您可以运行的示例

CREATE TABLE testNow(id int)
INSERT testNow VALUES(1)
INSERT testNow VALUES(2)

;WITH cte
AS (
SELECT TOP 1 * FROM testNow
ORDER BY ID DESC

)

-- id with 2 will become 5
UPDATE cte SET ID = 5

SELECT * FROM testNow
Run Code Online (Sandbox Code Playgroud)

产量

1
5
Run Code Online (Sandbox Code Playgroud)