Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否可以使用sql在update语句中使用MAX?_Sql Server_Tsql - Fatal编程技术网

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

Sql server 是否可以使用sql在update语句中使用MAX?,sql-server,tsql,Sql Server,Tsql,我试图在sql语句中使用MAX函数。以下是我试图做的: 大概是这样的: UPDATE MainTable SET [Date] = GETDATE() where [ID] = Max 我知道这是错误的,特别是当我把where条件放在同一条语句中,但无法找出如何使用max和update。谢谢单向 UPDATE MainTable SET [Date] = GETDATE() where [ID] = (SELECT MAX([ID]) FROM Mai

我试图在sql语句中使用MAX函数。以下是我试图做的: 大概是这样的:

UPDATE MainTable
        SET [Date] = GETDATE()

        where [ID] = Max
我知道这是错误的,特别是当我把where条件放在同一条语句中,但无法找出如何使用max和update。谢谢

单向

UPDATE MainTable
   SET [Date] = GETDATE()
 where [ID] = (SELECT MAX([ID]) FROM MainTable)
DECLARE @MaxID INT = (select MAX(id) FROM MainTable)

UPDATE MainTable
        SET [Date] = GETDATE()
        where [ID] = @MaxID
这就是SQL 2008语法,在2005年,您需要分两步完成变量的声明和赋值

还可以使用公共表表达式

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

)

UPDATE cte SET [Date] = GETDATE()
您可以运行的示例

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
输出

1
5

这很好,但我还有一个问题。。。为什么Get Date()函数不返回时间戳?它只返回日期。我想知道你最好在论坛上把这个问题作为一个新问题来问。我不知道如何将DateTime字段设置为时间戳。甚至不知道这是否可能。
UPDATE MainTable
SET [Date] = GETDATE()
WHERE [ID] = (SELECT MAX(your column) FROM yourtable)