22,209
社区成员
发帖
与我相关
我的任务
分享
USE [mybak]
GO
/****** Object: StoredProcedure [dbo].[GetLeague] Script Date: 2020/11/5 8:00:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[GetLeague]
AS
--根据对比TimeIns的时间来确定是否需要抓取
DECLARE @LastTime DATETIME
SELECT TOP 1 @LastTime=TimeIns FROM [TbLeague] ORDER BY TimeIns DESC
DECLARE @sLeague NVARCHAR(50)
SET @sLeague='-1'
BEGIN TRAN
SELECT TOP 1 @sLeague=sLeague FROM [dbo].[TbLeague] WHERE [Status]=0
AND sLeague IN (SELECT sLeague FROM [dbo].[TbLeagueFav] WHERE flag=1)
AND DATEDIFF(MINUTE,TimeCatch,GETDATE())>5
AND DATEDIFF(MINUTE,TimeIns,@LastTime)<5
ORDER BY [sLeague] ASC
IF @sLeague<>'-1'
BEGIN
UPDATE [dbo].[TbLeague] SET [Status]=1 WHERE sLeague=@sLeague
END
COMMIT TRAN
SELECT * FROM [TbLeague] WHERE sLeague=@sLeague
--1.你把select取变量,改成update取,update会加排他锁,这样不会重复取到值
--2.你可以用WAITFOR TIME指定一个时间,多开几个查询窗口测试一把
--需要排序的话
DECLARE @sLeague VARCHAR(50)
;
WITH ct
AS
(
SELECT sLeague,[Status],ROW_NUMBER() OVER(ORDER BY [sLeague]) AS id FROM [dbo].[TbLeague] WHERE [Status]=0
AND sLeague IN (SELECT sLeague FROM [dbo].[TbLeagueFav] WHERE flag=1)
)
UPDATE ct set @sLeague=sLeague ,[Status] = 1
WHERE id = 1
SELECT @sLeague
--不需要排序的话
UPDATE TOP (1) TbLeague set @sLeague=sLeague ,[Status] = 1
WHERE
[Status]=0 AND sLeague IN (SELECT sLeague FROM TbLeagueFav WHERE flag=1)
SELECT @sLeague