ALTER PROCEDURE [dbo].[TodayToYesterday] 
AS
BEGIN
--想到这里加个排它锁
Update Users Set InYesterday = InToday, DiffYesterday = DiffToday, OutYesterday = OutToday
Update Users Set InToday = 0, DiffToday = 0, OutToday = 0
Delete From InIP
Delete From OutIP
--执行完了解锁
END

解决方案 »

  1.   

    ALTER PROCEDURE [dbo].[TodayToYesterday] 
    AS 
    BEGIN 
    --想到这里加个排它锁 
    --如果在這個位置加了排他鎖 那么你下面的update不是也就不能更新了嗎?
    --而且 Update本身也是會排他鎖的,這個是SQL的機制,如果你想防止藏讀 ,我想可以用一個事務來做吧
    --期待高手具體解答
    --begin tran
    Update Users Set InYesterday = InToday, DiffYesterday = DiffToday, OutYesterday = OutToday 
    Update Users Set InToday = 0, DiffToday = 0, OutToday = 0 
    Delete From InIP 
    Delete From OutIP 
    --执行完了解锁 
    --commit tran
    END
      

  2.   

    ALTER PROCEDURE [dbo].[TodayToYesterday] 
    AS 
    BEGIN 
    set xact_abort on
    begin tran
    Update Users Set InYesterday = InToday, DiffYesterday = DiffToday, OutYesterday = OutToday 
    Update Users Set InToday = 0, DiffToday = 0, OutToday = 0 
    Delete From InIP 
    Delete From OutIP 
    if @@error =0 
       commit
    else
      rollback
    END