sql server 自动编号id删除后如何自动排号

全麦Logan 2010-06-01 10:23:45
我在表中设了一个列ID,自动编号,标识选为:是,标识种了为:1,标识增量为:1,问题是我加了一些数据,id也自动编号,我删了中间的一行后,id号不在是顺序号码,中间断号,如何在删除后id号继续是连续联号。
如何在sql server 2005中的企业管理器中设置或者有什么sql语句啊
...全文
832 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
全麦Logan 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 htl258 的回复:]
引用 2 楼 ynshi57 的回复:
引用 1 楼 htl258 的回复:
SQL2005用row_number()函数即可实现自动编号,所以:

不需要也没必要让想办法让ID连号,虽然从技术角度能实现,但也是比较麻烦。

我有10行,删除第5行,更新数据库后我希望id号可以是123456789,而不是123 4678910


你这样查:

SQL code

sel……
[/Quote]
因为我要读取数据库表,将表的内容按id号顺序读取到对话框的列表框中显示,如果id号不连续就会出错,就像有10行数据可是id号却有11,就没法读了
andy_liucj 2010-06-01
  • 打赏
  • 举报
回复
这个没什么必要吧,搞的跟数组一样,删掉中间一个,后面的还得都往前移位

想不出连号有什么好处
--小F-- 2010-06-01
  • 打赏
  • 举报
回复
不过个人觉得没必要这么做
--小F-- 2010-06-01
  • 打赏
  • 举报
回复
---cankao
利用触发器实现标识列连续。(支持批量插入)
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ttt]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[ttt]
GO

/****** Object: Table [dbo].[ttt] Script Date: 2008-12-15 17:11:26 ******/
CREATE TABLE [dbo].[ttt] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[time] [datetime] NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[ttt] ADD
CONSTRAINT [PK_ttt] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
GO

insert into ttt(name,time) values('logan',getdate());
insert into ttt(name,time) values('peter',getdate());
insert into ttt(name,time) values('man',getdate());
insert into ttt(name,time) values('lida',getdate());
insert into ttt(name,time) values('fcuandy',getdate());

select * from ttt
/*
1 logan 2008-12-15 17:36:37.780
2 peter 2008-12-15 17:36:37.780
3 man 2008-12-15 17:36:37.780
4 lida 2008-12-15 17:36:37.780
5 fcuandy 2008-12-15 17:36:37.793
*/


GO
CREATE TRIGGER tr ON ttt
INSTEAD OF INSERT
AS
SET IDENTITY_INSERT ttt ON
DECLARE @n INT
SELECT @n=MAX(id) FROM ttt
;WITH fc AS
(
SELECT n=1
UNION ALL
SELECT nn=n+1 FROM fc WHERE n<@n
),fc1 AS
(
SELECT n FROM fc a
LEFT JOIN ttt b
ON a.n = b.id
WHERE b.id IS NULL
)
INSERT ttt(id,name,time) SELECT n,name,time
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY GETDATE()) idx,n FROM fc1) a
INNER JOIN
(
SELECT idx=ROW_NUMBER() OVER (ORDER BY GETDATE()),name,time FROM inserted
) b
ON a.idx=b.idx
DECLARE @r INT
SELECT @r=@@ROWCOUNT

SET IDENTITY_INSERT ttt OFF
INSERT ttt(name,time) SELECT name,time FROM
(
SELECT idx=ROW_NUMBER() OVER (ORDER BY GETDATE()),name,time FROM inserted
) x
WHERE idx>@r


GO
DELETE FROM ttt WHERE name = 'peter' OR name='lida'
GO
INSERT ttt SELECT 'xxx',getdate()
INSERT ttt SELECT 'yyy',GETDATE()
GO
SELECT * FROM ttt
/*
1 logan 2008-12-15 17:37:20.967
2 xxx 2008-12-15 17:37:21.013
3 man 2008-12-15 17:37:20.967
4 yyy 2008-12-15 17:37:21.030
5 fcuandy 2008-12-15 17:37:20.967
*/

DELETE FROM ttt WHERE name ='xxx' OR name='yyy'

INSERT ttt SELECT 'roy_88',GETDATE() UNION ALL SELECT 'limpire',GETDATE() UNION ALL SELECT '熊',GETDATE()

SELECT * FROM ttt

/*
1 logan 2008-12-15 17:38:29.450
2 roy_88 2008-12-15 17:38:29.530
3 man 2008-12-15 17:38:29.467
4 limpire 2008-12-15 17:38:29.530
5 fcuandy 2008-12-15 17:38:29.467
6 熊 2008-12-15 17:38:29.530
*/


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fcuandy/archive/2008/12/15/3522876.aspx
htl258_Tony 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ynshi57 的回复:]
引用 1 楼 htl258 的回复:
SQL2005用row_number()函数即可实现自动编号,所以:

不需要也没必要让想办法让ID连号,虽然从技术角度能实现,但也是比较麻烦。

我有10行,删除第5行,更新数据库后我希望id号可以是123456789,而不是123 4678910
[/Quote]

你这样查:

select id=row_number()over(order by id),collist... from tb
全麦Logan 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yuqianpingnihao 的回复:]
ID是唯一的么????
[/Quote]
什么意思,有很多表,大部分表都有id项
yuqianpingnihao 2010-06-01
  • 打赏
  • 举报
回复
ID是唯一的么????
全麦Logan 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 htl258 的回复:]
SQL2005用row_number()函数即可实现自动编号,所以:

不需要也没必要让想办法让ID连号,虽然从技术角度能实现,但也是比较麻烦。
[/Quote]
我有10行,删除第5行,更新数据库后我希望id号可以是123456789,而不是123 4678910
htl258_Tony 2010-06-01
  • 打赏
  • 举报
回复
SQL2005用row_number()函数即可实现自动编号,所以:

不需要也没必要让想办法让ID连号,虽然从技术角度能实现,但也是比较麻烦。
印染厂生产仓储信息系统 需求分析说明书 一. 系统背景 我国经济经历经多年高速增长后,正处于崭新的发展阶段,人民生活水平普遍提高,国家不断加强环境保护和节能减排的政策力度。同时2008年下半年源自发达经济体的金融危机,愈演愈烈,已成为一场经济危机,并向全球蔓延。在这样的国际和国内经济背景下,我国经济发展面临着严峻考验,特别是以出口导向型劳动密集型产业面临的形势更为严峻:一方面劳动力、原材料、污水处理等成本上升,另一方面出口订单减少。在这种情况下,沿海某纺织印染集团公司的决策层经过分析和讨论,审时度势做出战略决策:与时俱进,调整和优化产品结构,提高产品附加值、推行精细化管理和集约化经营。 目前,根据集团的总体规划,将在印染分厂逐步建立一系列信息化系统,其中《生产仓储信息系统》,将实现原坯布和成品仓储管理信息化,达到精细化、精确化和高效化管理,达到最大限度降低仓储管理成本和提高仓储管理效率的目的。 本文将对《生产仓储信息系统》的实际需求进行分析,并制定出解决方案。 二. 系统目标 《生产仓储信息系统》主要实现以下目标:  实现坯布库存摆放和出入的信息化  实现灵活多样查询和统计  实现有效可靠的用户权限管理和系统的安全性 三. 业务描述 对纺织布匹进行印染加工是印染企业主要生产内容。布匹是印染厂的最主要生产物资,未经印染加工布匹被称为坯布(即纺织企业出厂产品),经过印染企业加工的布匹被称为成品布(即直接可在市场上销售的布匹)。 坯布进入印染厂后,首先存放在坯布仓库中,需要生产时,从坯布库中出库,供生产使用,本系统主要内容为坯布库的出入库管理和位置摆放管理。 (一) 坯布库管理  库存初始数据设置 在刚刚开始使用本系统时,可能仓库中已有一定的坯布,这时需要录入库存的初始量。库存初始信息包括: 规格、数量(米)、登记时间(年月日),是否确定。 对初始信息可以设置、修改和确定。 一旦确定之后就不可以再进行设置和修改。  坯布出入库 坯布出入库即将坯布提出坯布库和进入坯布库。仓库管理人员对每一次出入库情况做详细记录,每天下班前结账,结账以后的出入记录不可以再修改和变化,同时向上级部门报坯布库结存日报表和日出入库明细清单。 出入库记录信息包含如下内容: 记录号、出入类型(出库、入库、盘盈、盘亏)、时间(年月日)、客户、坯布厂家、规格、数量(米)、位置、登记人、登记时间(年月日时分秒)、是否已结账、结账人、结账时间(年月日时分秒)、是否注销,注销人、注销时间。 坯布出入库管理主要包括: 新增入库,即新建一条坯布入库信息,记录内容 包括:记录号、时间(年月日)、客户、坯布厂家、规格、数量(米)、位置、登记人、登记时间(年月日时分秒) 修改出入库记录:对入库信息进行修改(记录号不可以修改),登记人和登记时间重新记录,结账以后的信息不可以修改。 注销出入库记录:对作废的、错误的出入库记录注销,表示不再使用,同时记录注销人和注销时间,结账以后的信息不可以注销。 结账:对选择日期当天的出入库记录进行结账,经结账记录加结账标志,同时记录结账人和结账日期。结账以后的信息不可以二次结账。 生成日报:依据当日结账出入库记录和上日结存,生成当日库存日报,日报表样如下: 坯布库存日报表 部门:坯布库 报表人:XXX 日期:2009-6-28 规格 数量 上日结存 日入库 日出库 日结存 合计 生成日出入库明细:将当日结账出入库记录生成日出入库明细单,样表如下: 坯布日出入库明细单 部门:坯布库 报表人:XXX 日期:2009-6-28 记录号 规格 客户 坯布厂家 出入类型 数量 合计  坯布库存月报 坯布库存月报表 部门:坯布库 报表人:XXX 月份:2009-6 规格 数量 上月结存 月入库 月出库 月结存 合计  坯布库存年报 坯布库存年报表 部门:坯布库 报表人:XXX 年份:2009 规格 数量 上年结存 年入库 年出库 年结存 合计  坯布库存盘点 库存盘点即对库存坯布进行实物清点,并进行帐实核对,并生成盘点报表。 在盘点之时,停止所有坯布出入库,未结帐的数据全部结账,生成盘点表: 坯布库存盘点表 部门:坯布库 盘点日期:2009-8-20 规格 账面库存量 实际数量 盈亏数量 盘点人 盘点表中需要填入的信息是实际数量、盈亏数量、盘点人。 根据盘点表生成盘点报表: 坯布库存盘点报表 部门:坯布库 盘点日期:2009-8-20 规格 账面库存量 实际数量 盈亏数量 最后应当盈亏入账,使帐实相符,具体在出入库记录中添加记录,出入类型为盘盈或者盘亏。  坯布库查询 可以按客户、规格、出入库日期、出/入库、位置、是否结账、是否注销、登记人等条件灵活地组合查询出入库记录。 (二) 系统的安全要求 本系统的用户及权限 管理员:能够进行系统的用户管理和维护,以及为用户分配权限。 其他用户:等够操作权限范围内的业务。 用户管理 任何用户必须经过权限分配和登录方可进入系统进行操作,任何用户操作都不能超越所拥有的权限。 密码维护 任何用户可以且仅能修改自己的密码 四. 系统功能划分 生产仓储信息系统将实现面向所有用户的统一操作平台,不同的业务功能,通过该平台实现统一登录统一管理,具有内在联系业务之间数据共享,尽可能避免重复操作。 (一) 安全子系统  用户管理 系统自带一个管理员用户,可以进行用户信息管理,负责对系统用户信息维护,及用户的权限分配。具体功能描述如下: 可以新建用户信息:用户ID、用户名称,密码由系统默认“123456”。 可以修改用户信息(不含密码)和删除用户信息,删除用户时同时删除该用户所拥有的权限。  用户登录 所用的系统用户,必须通过登录验证方可进入系统。如果用户不存在或者密码错误应当返回登录页面,并给用户相应提示。 未经登录的用户直接访问需要登录后才能访问的url时,系统应等够阻止。  用户登录后的操作菜单(首界面) 用户登录系统后所看到的操作菜单应为用户拥有的权限范围内的菜单。 (二) 基础信息子系统  客户信息维护 根据生产需要输入和维护必要的订单编号信息,内容为订单编号,客户名称等。  规格维护 根据生产需要录入和维护规格信息,内容为规格名称等。  位置代码维护 位置代码是指在物品所在仓库位置的编号,本功能即对位置代码进行定义和维护。 位置代码为5位编码,规则:仓库代号+区号+排号+列号,其含义如下: 仓库代号:R-坯布库 P-成品库 区号:00-99 排号:0-9 列号:0-9  坯布厂家维护 对坯布厂家信息进行录入和维护。  初始库存设置 可以对初始库存进行录入和修改,无误之后可以对初始库存进行确定,确定之后不再可以新增和更改。  盘点开关设置 进入本功能模块,在非盘点期间可以进行开始盘点操作,在盘点期间可以进行结束盘点操作。 (三) 坯布库子系统  坯布出入库 非盘点期间 当日未结账之前,用户可以进行以下操作。 直接录入有关坯布出入库信息:出入类型(出库、入库、盘盈、盘亏)、客户、坯布厂家、规格、数量(米)、位置;系统自动生成记录号,并记录出入库日期、登记人姓名、登记人操作时间。 信息录入之后用户可以进行修改和注销和取消注销,但记录号不可以修改。 当日结账之后,仅可以查看出入库数据,不可以录入和修改、注销。 在盘点期间 不可以进行新增出入库信息,可以修改和注销现有未结帐信息,可以取消未结帐注销信息。  出入库结账 在非盘点期间 可以结账,即对选择某一日的出入记录进行扎结,结账之后不允许在已结账日期进行录入、修改、注销和结账操作,仅可以查看。 在该模块,用户可以生成当日库存日报。 在盘点期间 可以进行盘点结账,盘点结账之后不再可以修改、注销和取消注销。  坯布库存盘点 在盘点期间 用户可以生成盘点表,可以在盘点表中录入实际库存数量,可以提交保存,也可以修改。 如果盘点结束或者盈亏已入账则不可以再录入和维护实际库存数量(即不可以修改盘点表)。 盘点结束后 可以生成盘点报表。  坯布盈亏入账 用户可以将最近一次盘点盈亏数据入账,即以盘亏和盘盈的形式增加库存出入信息,这些信息来源于盘点表。 (四) 查询统计子系统  坯布库查询 可以按客户、规格、出入库日期、出/入库、位置、是否结账、是否注销、登记人等条件灵活地组合查询出入库记录。  坯布库存月报  坯布库存年报 五. 系统环境 (一) 硬件环境  1)硬件平台 1、网络环境: 内部的局域网网速:局域网线路带宽为100M,工作站要求10M/100M,DB服务器为100M/1000M。 客户机(浏览器)外部接入网速不低于256kbps 2、服务器要求: DB服务器要求为高性能的PC服务器,配置最低要求(5个客户端):奔腾双核1.8GHz CPU,2G DDR2,160G HDD,100M/1000M NET,其他设备建议配备磁盘阵列备份与UPS电源。 WEB服务器要求为为高性能的PC服务器,配置最低要求:奔腾双核2.0GHz CPU,2G DDR,40G HDD,100M/1000M NET,其他设备建议配备磁盘阵列备份与UPS电源。 3、客户端要求: CPU频率在1.8GHZ/内存256M/硬盘20G以上的PC机,其中显示器建议可正常上1024×768分辨率。 (二) 软件平台  1)软件平台 服务器操作系统:WINDOWS XP/ WINDOWS 2000 Server 数据库系统:sqlserver 2005 JAVA平台:JDK1.5 J2EE1.4 WEB服务器: Tomcat 6.0 客户端操作系统: WINDOWS2000、WINDOWS XP 客户端浏览器:IE7.0或以上版本  2)系统开发工具 Eclipse 3.3+MyEclipse 6.5 + Tomcat6.0

22,299

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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