如何在 C# 中重置标识列?

how to reset Identity Column in C#?

我有一个问题,我知道我的问题的答案,但我不知道为什么它不执行!

我的问题是:我有一个table。在 table 我有 ID。如果我从 table 中删除行,那么 ID 会发生变化。如果我有这个(1,2,3,4)。当我删除第二行时,它变成 (1,3,4)。如何重置此ID?我知道查询是这样的:

DBCC CHECKIDENT ('T0', RESEED, 1)

...我想在 Visual Stdio 2013 中使用 c# 语言使用此查询。这是我的代码:

SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = "DBCC CHECKIDENT ('T0', RESEED, 1) ";
cmd.ExecuteNonQuery();
con.Close();

,但它不起作用。有什么问题?

DBCC CHECKIDENT ('T0', RESEED, 1) 所做的是使插入的 new 行从 1 开始计数。 它不会影响数据库中的现有行!

"Compact" 没有内置函数 SQL 您想要的数字内置到 SQL,通常身份列用作 link 两个 table 在一起,如果您更新此 table 中的记录,您还需要更新引用这些行的所有其他 table。

最接近的是做一个临时的 table 从 1 开始计数然后执行更新

select ID, ROW_NUMBER() over (order by ID) as newID into #t from T0;

update T0 set ID = newID where ID = #t.ID from #T;

--Reset the ID to 1
DBCC CHECKIDENT ('T0', RESEED, 1);
--Roll the ID forward to the max used value
DBCC CHECKIDENT ('T0', RESEED);