如何使用SELECT处理并发?

时间:2018-08-20 22:33:51

标签: sql-server-2008 concurrency

我需要验证记录是否已经存在。存储过程中执行该操作的部分是:

SELECT EXISTS (SELECT 1 FROM MyTable 
               WHERE FirstName = @FirstName 
                 AND LastName = @LastName 
                 AND Address = @Address)
BEGIN
    SET @IsNewRecord = 1
END

IF @IsNewRecord = 1
BEGIN
    INSERT INTO MyTable
    VALUES (@FirtName, @LastName, @Addres, @City, @Phone)
END

那很好,问题是当多个客户端同时调用存储过程时,它将返回@IsNewRecord = 1

我已经尝试过在TRANSACTION BLOCK之间进行验证,但是它仍然会创建一条新记录。

使用SELECT时如何处理并发?

1 个答案:

答案 0 :(得分:0)

这样做

begin transaction
SELECT EXISTS (SELECT 1 FROM MyTable WHERE FirstName = @FirstName  AND LastName = @LastName 
                 AND Address = @Address)
BEGIN
   INSERT INTO MyTable
    VALUES (@FirtName, @LastName, @Addres, @City, @Phone)
END
commit