删除数据表中二行后,怎样让编号ID重新从1开始。

nongfuxu123 2016-05-11 09:27:48
起先数据表中排列是这样的:




我删除第一行、第二行后,如下:



请教怎样让编号ID重新从1开始。

注:表中ID是主键,int类型
...全文
771 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
grant-bobo 2018-06-13
  • 打赏
  • 举报
回复
道素 2016-05-12
  • 打赏
  • 举报
回复
如果的ID是自增长列IDENTITY,不允许update 操作IDENTITY有两种办法用: 1. 用SET IDENTITY_INSERT tablename ON 插入数据是指定ID值 2. 用DBCC CHECKIDENT(tablename, RESEED, @newseedvalue) 重置seed,但如果设置成比现在最大id小的值,会造成主键重复。 我个人觉得你没必要重新修改ID,因为如果其他表用了这个ID值关联这个表的数据,如果你修改了ID,那么就造成数据混乱。 但如果你非要整个重置,有个这种办法,你可以将数据先复制到临时表,然后清除这个表数据重置seed,再将数据复制回来即可

IF OBJECT_ID('tempdb..#t') IS NOT NULL DROP TABLE #t
CREATE TABLE #T(id INT IDENTITY(1,1)  primary KEY,s VARCHAR(100))
GO
INSERT INTO #t(s) VALUES('a')
GO 10
DELETE FROM #t WHERE id<3
SELECT * FROM #t

SELECT * into #tt FROM #t ORDER BY id
TRUNCATE TABLE #t
select ident_current('#t')
INSERT INTO #t
SELECT s FROM #tt ORDER BY ID
SELECT * FROM #t
疯子de幸福 2016-05-12
  • 打赏
  • 举报
回复
伪主键 用rownumber 行号替代
nongfuxu123 2016-05-12
  • 打赏
  • 举报
回复
噢,ch21st对不起,忘记给你加分了。
nongfuxu123 2016-05-12
  • 打赏
  • 举报
回复
感谢楼上各位,基本明白怎么做了。 结贴散分。
nongfuxu123 2016-05-11
  • 打赏
  • 举报
回复
我自己试了一下出错 了。代码如下

            int id = 1;
//遍历一个表多行一列
foreach (DataRow row in MyDataSet.Tables[0].Rows)
{
//读取当前编号ID
string tID = row[0].ToString(); //数据表的第1列=编号ID

//修改ID号,从1开始递进
string sqlCommd = "update tb_ControllerType set ID='" + id + "' where ID='" + Convert.ToInt32(tID) + "'";
MySqlConnect.ExecuteNonQueryCommand(sqlCommd, Global_Parameter.str_SqlConnect);

id++;
}


运行结果是报错,如下图所示。

nongfuxu123 2016-05-11
  • 打赏
  • 举报
回复
引用
前者要用可以考虑触发器(自增列不能用),后者row_number 就可以了
谢谢你斑竹。能说详细点嘛,有例子代码最好了。
nongfuxu123 2016-05-11
  • 打赏
  • 举报
回复
我是想改变数据表里的内容。
卖水果的net 版主 2016-05-11
  • 打赏
  • 举报
回复
你是要改变数据里的内容呢,还是想仅仅在显示的时候,从 1 开始? 前者要用可以考虑触发器(自增列不能用),后者row_number 就可以了;

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧