加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 获取更新的行

发布时间:2020-12-12 16:22:13 所属栏目:MsSql教程 来源:网络整理
导读:我有一个更新一条记录的查询,只有一条记录.是否有方法可以在同一查询中更新Id,例如插入时选择ScopeIdentity. UPDATE TaskSET MyTime = GetDate(),MyUserId = @useridFROM (select top 1 table where SomeStuff)Select Lastrow that just got updated. 解决方
我有一个更新一条记录的查询,只有一条记录.是否有方法可以在同一查询中更新Id,例如插入时选择ScopeIdentity.
UPDATE Task
SET MyTime = GetDate(),MyUserId = @userid
FROM (select top 1 table where SomeStuff)

Select Lastrow that just got updated.

解决方法

根据您的操作,您可能需要使用OUTPUT的表语法.可能是指定临时表/表变量.
DECLARE @T TABLE
(
    MyID INT NOT NULL
)

UPDATE Task
SET MyTime = GetDate(),MyUserId = @userid
OUTPUT INSERTED.MyID INTO @T
FROM (/* your FROM clause here */) Task

gbn在我之前进行了编辑,基本上和上面说的一样.我想补充一点,另一种方法是首先获取ID,然后按ID更新.此外,TOP 1应该几乎总是与ORDER BY一起使用.

-- You may need to clean up the error handling. I just wanted
-- to put something simple in to remind that it is necessary.
DECLARE @userid INT; SET @userid = /* e.g.,*/ 1234
BEGIN TRANSACTION
IF @@ERROR <> 0 RETURN
DECLARE @TaskID INT
SET @TaskID = (SELECT TOP 1 TaskID FROM Task WITH (UPDLOCK) ORDER BY /* e.g.,*/ TaskID) -- TaskID should be the PK of MyTable. Must be unique.
IF @@ERROR <> 0 BEGIN ROLLBACK TRANSACTION RETURN END
UPDATE Task
SET MyTime = GETDATE(),MyUserId = @userid
WHERE TaskID = @TaskID
COMMIT TRANSACTION

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读