Sql server 包含增量计数器的SQL表

Sql server 包含增量计数器的SQL表,sql-server,stored-procedures,Sql Server,Stored Procedures,我需要用一个计数器来更新一个表-这是一个非常简单的设置 该表的行数不超过10行。目前,3字符字符串列(SiteCode)上有一个PrimaryIndex,第二列(NumVotes)包含一个长数字 其思想是通过线程安全和最小的锁定来增加NumVotes 我已经设法给她提供了一个有效的存储过程,但我有两个问题超出了我的专业知识范围 如果同时发生10次、20次或30次更新,我所创建的存储过程是否可以改进,或者是否足够 字符串索引将成为一个问题 站点代码-varchar(3) NumVotes-int(

我需要用一个计数器来更新一个表-这是一个非常简单的设置

该表的行数不超过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