2013-05-30 35 views
1

我已存儲過程:安全存儲過程更新

ALTER PROCEDURE [dbo].[myDbProcedure] 
@ID int 

AS 
BEGIN 
SET NOCOUNT ON; 

IF EXISTS (SELECT * FROM [myDB] WHERE @ID = [ID]) 
UPDATE [myDB] 
SET [count] = [count] - 1 
, [paymentCount] = [paymentCount] + 1 
WHERE @ID = [ID] 

END 

現在我要爭取,如果100人同時更新表的任何信息不要錯過

+0

當你說安全時,你的意思是你不希望數據變得不一致嗎?如果是這樣的話,那麼你想看看交易... – Penfold

+0

@Penfold否,如果100人同時更新表更新只有誰是第一個。我需要一些邏輯來更新100個人(同時更新)的表格步驟 – GeoVIP

+2

'IF EXISTS(SELECT * FROM [myDB] WHERE @ID = [ID])' – vikas

回答

2

不知道我完全理解你需要什麼:

Begin Tran 
    IF EXISTS (SELECT * FROM [myDB] WHERE @ID = [ID]) 
    UPDATE [myDB] 
    SET [count] = [count] - 1 
    , [paymentCount] = [paymentCount] + 1 
    WHERE @ID = [ID] 
Commit 

你也可以考慮刪除if,一旦更新只發生在寄存器實際存在的情況下。通過這種方式,您將獲得本質上在事務環境中運行的更新。考慮查看隔離級別(從註釋:set transaction isolation level serializable)。

+0

'需要什麼回答時,如果有100人同時更新表格更新,只有誰是第一個。我需要一些邏輯來更新100個人的桌面(同時更新)步驟 – GeoVIP

+0

您可能想在這裏查看方法4:http://michaeljswart.com/2011/09/mythbusting-concurrent-updateinsert-解決方案/ – JoseTeixeira

+0

謝謝,我會檢查 – GeoVIP