gpt4 book ai didi

sql-server - DBCC CHECKIDENT RESEED——是否需要新值?

转载 作者:行者123 更新时间:2023-12-02 15:22:06 26 4
gpt4 key购买 nike

我读到的有关重新播种的所有文档都表明了以下内容:

  1. SET @maxIdentityValue = (SELECT MAX(id) FROM 表名)
  2. 运行DBCC CHECKIDENT('表名', RESEED, @maxIdentityValue)

但是但是在我看来,一个简单的DBCC CHECKIDENT('tablename', RESEED)就足够了,它会自动确定正确的身份值表不提供最大值。

是否有理由(性能或其他原因)优先使用 MAX 提取值?

附带问题:我需要重新设定种子的原因是因为我正在使用复制,并且每次数据库复制运行时身份都会被设置为 Null。我究竟做错了什么?如何为每个表维护正确的身份种子?

更新(当前解决方案)

目前我没有使用最大值。这是我正在使用的存储过程(我使用 sys.columns 上的查询生成它,然后将每个过程剪切并粘贴到新的查询窗口中。梅西耶,速度较慢,不太优雅,但我'我对存储过程不太熟悉,也不想使用动态 SQL 查询):

declare @seedval integer
declare @maxval integer
declare @newval integer
set @seedval = (select ident_current('mytable'));
set @maxval = (select MAX(id) from mytable);
if @maxval > @seedval or @seedval is NULL
BEGIN
print 'Need to reseed: max is ' + cast(@maxval as varchar) + ' and seed is ' + cast(@seedval as varchar)
dbcc checkident('mytable', RESEED);
set @newval = (select ident_current('mytable'));
print 'Max is ' + cast(@maxval as varchar) + ' and seed is ' + cast(@newval as varchar)
END
ELSE
print 'No need to reseed';

最佳答案

正如 MSDN 中所述,只需使用:
就足够了

 DBCC CHECKIDENT('tablename', RESEED)  

大多数情况下,但是有以下两种情况它不起作用:

  • 当前标识值大于表中的最大值。
  • 所有行都将从表中删除。

您必须按照您提到的方式进行操作(选择 max(id) 和其余部分),那么为什么首先要麻烦呢? :)

关于sql-server - DBCC CHECKIDENT RESEED——是否需要新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14445185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com