我可以在缓存表中重置ChangeId以进行更改通知

时间:2011-09-15 14:53:36

标签: asp.net caching sqlcachedependency

如果我重置表

中的changeId值会发生什么
AspNet_SqlCacheTablesForChangeNotification

其中一行当前最大值为2亿,我们的更新失败。我尝试将类型更改为BigInt但读取它的应用程序失败。我需要将这些重置为0.可以吗?会有问题吗?

1 个答案:

答案 0 :(得分: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