我需要用计数器更新一个表 - 这是一个非常简单的设置。
该表不会超过10行。目前,3-char字符串列(SiteCode)上有一个PrimaryIndex,第二列(NumVotes)包含一个长数字。
我们的想法是通过线程安全和最小锁定来增加NumVotes。
我已经成功地提出了一个有效的存储过程,但我有两个超出我专业知识的问题。
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