Sql server 包含增量计数器的SQL表
我需要用一个计数器来更新一个表-这是一个非常简单的设置 该表的行数不超过10行。目前,3字符字符串列(SiteCode)上有一个PrimaryIndex,第二列(NumVotes)包含一个长数字 其思想是通过线程安全和最小的锁定来增加NumVotes 我已经设法给她提供了一个有效的存储过程,但我有两个问题超出了我的专业知识范围Sql server 包含增量计数器的SQL表,sql-server,stored-procedures,Sql Server,Stored Procedures,我需要用一个计数器来更新一个表-这是一个非常简单的设置 该表的行数不超过10行。目前,3字符字符串列(SiteCode)上有一个PrimaryIndex,第二列(NumVotes)包含一个长数字 其思想是通过线程安全和最小的锁定来增加NumVotes 我已经设法给她提供了一个有效的存储过程,但我有两个问题超出了我的专业知识范围 如果同时发生10次、20次或30次更新,我所创建的存储过程是否可以改进,或者是否足够 字符串索引将成为一个问题 站点代码-varchar(3) NumVotes-int(
虽然您可能会在这里得到答案,但这是codereview.stackexchange.com的一个好问题,因为您的问题可能会对问题1提出“意见”#尽管您可能会在这里得到答案,但这是codereview.stackexchange.com的一个好问题,因为您的问题可能会对问题1提出“意见”
ALTER PROCEDURE dbo.ComparisonStats_Update
@SiteCode varchar(3),
@IncNumVotes int
AS
SET NOCOUNT ON
BEGIN
MERGE ComparisonStats WITH (HOLDLOCK) AS t
USING (SELECT @SiteCode AS SiteCode, @IncNumVotes AS IncNumVotes) as s
ON t.SiteCode = s.SiteCode
WHEN MATCHED THEN
UPDATE SET
NumNumVotes += IncNumVotes
WHEN NOT MATCHED BY TARGET THEN
INSERT (SiteCode, NumNumVotes)
VALUES (s.SiteCode, s.IncNumVotes);
END