我正在使用preparedStatements从java J2EE访问SQL Server 2005表。这些jar部署在两台服务器上并行运行。 过程如下:
在某些情况下,用户会收到2封电子邮件(每封服务器一封),因为在删除声明之前同时执行了2次选择。 我没有表的管理员权限,只是从java应用程序访问它。
如何在第一次选择时锁定表并在删除后将其解锁? 你看到了另一种解决方案吗?
答案 0 :(得分:2)
如果您以事务方式工作,只有一台服务器可以选择它:
set transaction isolation level repeatable read
update top 1 tbl
set ProcessingOnServer = HOST_NAME()
from YourWorkTable tbl
where ProcessingOnServer is null
and Done = 0
现在您可以选择详细信息,知道工作项已安全地分配给您:
select *
from YourWorkTable tbl
where ProcessingOnServer = HOST_NAME()
and Done = 0
函数host_name()
返回客户端名称,但如果您认为它更安全,则可以从客户端应用程序传入主机名。
我们通常会添加时间戳,因此您可以检查处理项目花费时间过长的服务器。