我有一个多线程的C#应用程序。应用程序的目的是找到存储在SQL服务器表中的可用代理服务器以进行连接。
该表包含 200个代理。允许的最大并发代理连接数为5。
该表格包含以下列:
(ProxyId int,IpAddress varchar,IsSocks bit,ConnectStatus tinyint,LastConnected datetime)
ProxyId是一个标识列,ConnectStatus有3个值
我定义了以下存储过程,它将从C#app中调用:
Create Proc GetNextAvailableProxy
AS
Declare @proxyId int, @ipAddress varchar(20), @isSocks bit
if (Select Count(*) From Proxies Where ConnectStatus > 0) < 5 Begin
Select Top 1 @proxyId = Id, @ipAddress= IpAddress, @isSocks = IsSocks
From Proxies with (updlock, readpast)
Where ConnectStatus = 0
Order By IsNull(LastConnected, '1970-01-01')
Update Proxies Set ConnectStatus = 1
Where Id = @proxyId
Select @proxyId ProxyId, @ipAddress IpAddress, @isSocks IsSocks;
return;
End
Select Null ProxyId, Null IpAddress, Null IsSocks
GO
以上sp获取下一个可用代理,如果有5个代理连接或连接,则C#app会收到Null for proxyId并等待2秒再重试。
成功建立代理连接时,C#应用程序将设置ConnectStatus = 2,完成工作后,ConnectStatus = 0。
我的问题:我的sp是否正确选择了表提示?我不知道我应该在Select Count(*)语句中放置什么表提示。