2011-09-15 49 views
0

,如果我在表我可以重置緩存表中ChangeId更改通知

AspNet_SqlCacheTablesForChangeNotification 

一排在2.X十億目前刷爆復位changeId值會發生什麼情況,我們的更新失敗。我嘗試將類型更改爲BigInt,但讀取它的應用程序失敗。我需要將它們重置爲0.是否可以?會有問題嗎?

+0

你知道如何/在哪裏了changeID的舊版本保留了嗎? –

回答

3

快速回答是...是的。我們最近遇到這個問題,並有同樣的問題。我發現的許多網站都有關於此的未解答的問題。經過多次的狩獵之後,我別無選擇,只能爲此而努力。這就是我所做的,它工作得很好。

有一個更新被添加到一個或多個表中的觸發器調用。應該是這樣的:

EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'YourTableName」

此存儲過程不使用標識列,但經常INT列,並通過更新‘changeId = changeId + 1’。一旦達到MAX值,它就會爆炸。如下更改此UPDATE語句:

替換:

SET changeId = changeId + 1

有了:

SET changeId = 
    CASE 
     WHEN changeId = 2147483647 --Max INT 
     THEN 1 
     ELSE changeId + 1 
    END 

它應該是這樣的:

ALTER PROCEDURE [dbo].[AspNet_SqlCacheUpdateChangeIdStoredProcedure] 
     @tableName NVARCHAR(450) 
    AS 

    BEGIN 
     UPDATE dbo.AspNet_SqlCacheTablesForChangeNotification WITH (ROWLOCK) 
     SET changeId = 
      CASE 
       WHEN changeId = 2147483647 -- Max INT 
       THEN 1 
       ELSE changeId + 1 
      END 
     WHERE tableName = @tableName 
    END 
+0

感謝您的回答!這很有趣 - 我不再爲公司工作,這是一個問題,客戶已經與我的前僱主放棄了合同,但這仍然是一件好事。 – DaveDev

+0

很高興有用。我知道這讓我感到沮喪,因爲我沒有找到答案,所以希望這可以幫助任何遇到它的人。 –