我有一个问题,我知道我的问题的答案,但我不知道为什么它不执行它!
我的问题是:我有一张桌子。在表格中我有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();
,但它不起作用。什么问题?
答案 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);