SQL Server:如果不存在则添加行,增加一列的值,原子
我有一个表,用于记录用户操作.每次执行操作时,值都需要增加.由于用户可以同时拥有多个会话,因此该过程需要是原子的,以避免多用户问题.
该表有3列: > ActionCode为varchar 我想将ActionCode和UserID传递给一个函数,该函数将添加一个新行(如果尚不存在),并将count设置为1.如果该行存在,则只会将计数增加一. ActionCode和UserID构成此表的主要唯一索引. 如果我需要做的就是更新,我可以做这样简单的事情(因为UPDATE查询已经是原子的): UPDATE (Table) SET Count = Count + 1 WHERE ActionCode = @ActionCode AND UserID = @UserID 我是SQL新手中的原子事务.这个问题可能已在多个部分得到解答,但我找不到这些问题并将这些部分放在一个解决方案中.这也需要非常快,而不会变得复杂,因为这些操作可能经常发生. 编辑:对不起,这可能是一个MySQL how to do an if exist increment in a single query的欺骗.我搜索了很多,但在我的搜索中有tsql,一旦我改为sql,这是最好的结果.如果这是原子的,那不是很明显,但很确定它会是.我可能会投票删除这个作为欺骗,除非有人认为这个问题和答案可以增加一些新的价值. 解决方法假设您使用的是SQL Server,要创建单个原子语句,您可以使用 MERGEMERGE YourTable AS target USING (SELECT @ActionCode,@UserID) AS source (ActionCode,UserID) ON (target.ActionCode = source.ActionCode AND target.UserID = source.UserID) WHEN MATCHED THEN UPDATE SET [Count] = target.[Count] + 1 WHEN NOT MATCHED THEN INSERT (ActionCode,UserID,[Count]) VALUES (source.ActionCode,source.UserID,1) OUTPUT INSERTED.* INTO #MyTempTable; 更新如果需要,使用输出选择值.代码已更新. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |