SQL表持有增量计数器

时间:2016-11-07 14:56:20

标签: sql-server stored-procedures

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

该表不会超过10行。目前,3-char字符串列(SiteCode)上有一个PrimaryIndex,第二列(NumVotes)包含一个长数字。

我们的想法是通过线程安全和最小锁定来增加NumVotes。

我已经成功地提出了一个有效的存储过程,但我有两个超出我专业知识的问题。

  1. 如果同时进行10次,20次或30次更新,我可以改进存储过程,还是足够?
  2. 字符串索引是否有问题。
  3. SiteCode - varchar(3)

    NumVotes - int(可以一次添加超过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
    

0 个答案:

没有答案