改成这样试试:BEGIN
 
    DECLARE @tmpId INT;
 
    --在这里开始上锁,独占这一行,不允许其他用户查询这一行
    SELECT TOP 1 @tmpId=Id
    FROM Task with(xlock)    --加了独占锁
    WHERE DATEDIFF(mi,t.Last_Work_Time,GETDATE())> Interval_Time
    ORDER BY Id ASC ;
 
    UPDATE Task SET Last_Work_Time=GETDATE() WHERE Id=@tmpId;
    --更新之后,解锁
 
    SELECT Id,Keyword,Interval_Time,Last_Work_Time FROM Task WHERE Id=@tmpId;
 
END

解决方案 »

  1.   


    BEGIN
        DECLARE @tmp table (tmpId INT)    BEGIN tran
        UPDATE Task SET Last_Work_Time=GETDATE() 
        OUTPUT Inserted.ID INTO @tmp
        WHERE Id=
        (
        SELECT TOP 1 Id
        FROM Task
        WHERE DATEDIFF(mi,t.Last_Work_Time,GETDATE())> Interval_Time
        ORDER BY Id ASC
        )
        COMMIT TRAN
     
        SELECT Id,Keyword,Interval_Time,Last_Work_Time FROM Task 
        WHERE Id=(SELECT tmpId from @tmp)
    END
      

  2.   


    BEGIN
        DECLARE @tmp table (Id INT,Keyword VARCHAR(MAX),Interval_Time datetime,Last_Work_Time DATETIME)
     
        BEGIN tran
        UPDATE Task SET Last_Work_Time=GETDATE() 
        OUTPUT Inserted.ID,Inserted.Keyword,Inserted.Interval_Time,Inserted.Last_Work_Time INTO @tmp
        WHERE Id=
        (
        SELECT TOP 1 Id
        FROM Task
        WHERE DATEDIFF(mi,t.Last_Work_Time,GETDATE())> Interval_Time
        ORDER BY Id ASC
        )
        COMMIT TRAN
          
        SELECT * FROM @tmp
    END
      

  3.   

    谢谢两位的热心帮助,我用了lzw_0736的代码。
      

  4.   

    谢谢两位的热心帮助,我用了lzw_0736的代码。呵呵,lzw_0736的确实是好办法,把2个语句合成1个,这样确实好多了