如果我重置表中的 changeId 值会发生什么
AspNet_SqlCacheTablesForChangeNotification
其中一行目前已达到 2.x 十亿的最大值,我们的更新失败了。我尝试将类型更改为 BigInt,但读取它的应用程序失败。我需要将这些重置为 0。可以吗?会不会有问题?
如果我重置表中的 changeId 值会发生什么
AspNet_SqlCacheTablesForChangeNotification
其中一行目前已达到 2.x 十亿的最大值,我们的更新失败了。我尝试将类型更改为 BigInt,但读取它的应用程序失败。我需要将这些重置为 0。可以吗?会不会有问题?
快速的答案是……是的。我们最近遇到了这个问题并且有同样的问题。我发现的一些网站对此有未回答的问题。经过多次狩猎,我别无选择,只能继续前进。这就是我所做的,它工作得很好。
添加到一个或多个表的触发器调用了更新。应该是这样的:
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