SQL Server – 是否可以在行更新之前返回现有列值?

前端之家收集整理的这篇文章主要介绍了SQL Server – 是否可以在行更新之前返回现有列值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个查询,用于更新论坛帖子(ForumPosts)的用户投票(ForumVotes).用户可以向上或向下投票(投票将等于1或-1).此问题特定于更改用户的投票,因此ForumVotes表中已存在投票记录.

ForumPosts表存储每个帖子的总分,所以我需要保持这个字段同步.要重新计算总分,我需要在添加新投票之前先减去旧投票,因此我需要在更新用户的投票记录之前获得旧投票.

我知道我可以使用2个查询执行此操作,但我想知道是否可以(在sql Server 2008中)UPDATE在执行更新之前返回列的值?

这是一个例子:

TABLE ForumPosts (
    postID bigint,score int,... etc
)

-- existing vote is in this table:

TABLE ForumVotes (
    postFK bigint,userFK bigint,score int
)

用于更新用户投票的简单查询

UPDATE ForumVotes 
SET score = @newVote 
WHERE postFK = @postID
AND userFK = @userID

可以修改查询以在更新之前返回旧分数吗?

解决方法

尝试OUTPUT子句:
declare @prevIoUs table(newscore int,Oldscore int,postFK int,userFK int)

UPDATE ForumVotes 
SET score = @newVote 
OUTPUT inserted.score,deleted.score,deleted.postFK,deleted.userFK into @prevIoUs
WHERE postFK = @postID
AND userFK = @userID

select * from @prevIoUs
原文链接:https://www.f2er.com/mssql/78001.html

猜你在找的MsSQL相关文章