簡單排序問題

pomelo1230 2004-10-22 08:59:15
我有這樣一個表
序號 姓名 電話號碼
1 aa 1233445
2 bb 89202
3 cc 9380
4 dd 380200

其中序號是自增的,我在表里進行了插入及刪除的功能,結果"序號"就斷斷續續的,如變成了"1,3,4,5,8",不能連續顯示,請問怎麼做才能在插入和刪除后,序號會再次自動排序成"1,2,3,4,5"呢,多多請教了!!
...全文
156 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
clavier 2004-10-23
  • 打赏
  • 举报
回复
可以把SET IDENTITY_INSERT设置为On
下例创建一个含有标识列的表,并显示如何使用 SET IDENTITY_INSERT 设置填充由 DELETE 语句导致的标识值中的空隙。

-- Create products table.
CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
GO
-- Inserting values into products table.
INSERT INTO products (product) VALUES ('screwdriver')
INSERT INTO products (product) VALUES ('hammer')
INSERT INTO products (product) VALUES ('saw')
INSERT INTO products (product) VALUES ('shovel')
GO

-- Create a gap in the identity values.
DELETE products
WHERE product = 'saw'
GO

SELECT *
FROM products
GO

-- Attempt to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO products (id, product) VALUES(3, 'garden shovel')
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT products ON
GO

-- Attempt to insert an explicit ID value of 3
INSERT INTO products (id, product) VALUES(3, 'garden shovel').
GO

SELECT *
FROM products
GO
-- Drop products table.
DROP TABLE products
GO

good_luck898 2004-10-22
  • 打赏
  • 举报
回复
create table t1(a int,b varchar(10),c varchar(10))

create trigger tg_t1 on t1
for insert
as
declare @max int,
@b varchar(10)
select @b=b from inserted
select @max=count(@@RowCount)from t1
update t1 set a=@max where b=@b
---------------------------
--test
insert into t1 values(5,'abc','desfff')
yjdn 2004-10-22
  • 打赏
  • 举报
回复
给你一个例子吧:做两个触发器
ALTER trigger 自增_简答题delete
on 简答题
for delete
as
declare @id int,@cnt int
select @cnt=count(*) from deleted
select @id=max(记录号) from deleted
begin
update 简答题 set 记录号=记录号-@cnt,@id=@id+1 where 记录号>@id
end

ALTER trigger 自增_简答题insert
on 简答题
after insert
as
if not exists(select * from 简答题)
begin
update 简答题 set 记录号=1
end
else
begin
update 简答题 set 记录号=(select count(*) from 简答题) where 简答题.题目 in (select
题目 from inserted)
end


--记录号为所要实现自增的列
yjdn 2004-10-22
  • 打赏
  • 举报
回复
哦,没看清楚,
如果要插入和删除都保持连续,楼主还是自己做触发器来实现吧。
yjdn 2004-10-22
  • 打赏
  • 举报
回复
1:你可以自己做一个触发器来实现那样的自增功能
2:
做触发器,再建一个表,每次删除一个记录的时候,把ID值保存在里面

3:也做一个插入型的触发器,插入数据的时候,用这个方法来插入ID值
set identity_insert 表名 on
go
insert 表名 (字段) --字段一定要填写
values(字段值)
go
set identity_insert 表名 off


--当然,ID值是从那个表中取出
zjcxc 2004-10-22
  • 打赏
  • 举报
回复
我是叫你删除字段,不是让你删记录
pomelo1230 2004-10-22
  • 打赏
  • 举报
回复
但是如果我有100條記錄,我把第20條記錄刪了,總不可能再把后面80條記錄也刪了,再添加上去吧
zjcxc 2004-10-22
  • 打赏
  • 举报
回复
自增字段是不可以修改其值的.
zjcxc 2004-10-22
  • 打赏
  • 举报
回复
删除 序號 字段,再重新添加回去就行了.
张海霖 2004-10-22
  • 打赏
  • 举报
回复
作不到,这样也太低效了。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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