0

如果我重置表中的 changeId 值会发生什么

AspNet_SqlCacheTablesForChangeNotification

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

4

1 回答 1

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
于 2012-02-28T17:29:40.487 回答