需求:
今天,为了网站的整站静态发布的效率,实现了多线程发布功能!
但在数据库中没有特殊点的操作时,多个线程可能重复获取一部分数据,从而浪费了一些资源,甚至可能引起不必要的异常!
话多说,来看看实现方法吧!
准备:
测试表:Create Table URLMAP
(
ID int IDENTITY(1,1) NOT NULL,
ActiveURL varchar (200) NULL,
HtmDir varchar (200) NOT NULL,
HtmName varchar (20) NULL,
IsBuilded int NOT NULL,
BuildedDate datetime NULL,
CreateDate datetime NOT NULL
);
注:IsBuilded 取值:0未取,1正在处理,2处理完成;
CREATE PROCEDURE pr_UrlMap_GetNext
AS
BEGIN
-- 0:没有发,1:正在发,2:已发布
DECLARE @ID TABLE(ID INT)
UPDATE nr_UrlMap SET IsBuilded=1 OUTPUT deleted.ID INTO @ID
WHERE ID = (SELECT TOP 1 ID FROM nr_UrlMap WHERE IsBuilded = 0 ORDER BY ID ASC)
SELECT * FROM nr_UrlMap WHERE ID IN (SELECT ID FROM @ID)
END
注:转发请保留出处