如何在C#中重置Identity Column?

时间:2015-09-23 22:46:09

标签: c# sql-server ado.net

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

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

DBCC CHECKIDENT ('T0', RESEED, 1)

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

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

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

1 个答案:

答案 0 :(得分:2)

DBCC CHECKIDENT ('T0', RESEED, 1)将要执行的操作是 插入的行从1开始计数。 它不会影响数据库中的现有行!

没有内置函数来“压缩”您希望内置于SQL的数字,通常将Identity列用作将两个表链接在一起的外键,如果更新此表中的记录,您还可以需要更新引用行的所有其他表。

你可以得到的最接近的是制作一个临时表,从一个计数,然后执行更新

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);