如何设置自动编号的深入浅出的问题??

时间:2008-02-11 09:24:15   来源:论坛整理   翻译整理:IT者  : 作者:qicaihuochai
<script type="text/javascript"> </script> <script src="file:///E:/%E6%88%91%E7%9A%84%E6%96%87%E6%A1%A3/%E7%9F%A5%E8%AF%86%E4%B9%8B%E5%AE%B6/%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%E8%87%AA%E5%8A%A8%E7%BC%96%E5%8F%B7%E7%9A%84%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BA%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%9F%EF%BC%9F%20-%20IT%E8%80%85_files/show_ads.js" type="text/javascript"> </script>
我的数据库是SQL2000,我想将一个字段设置成自动编号,并且自动编号的格式为:0001.即第一条记录的编号是:0001,那么自动编号的下一条记录的编号就是:0002.

并且假如在中间删除一条数据记录不影响其他编号的变化。即,记录编号从0001到1000,删除0050,其他的号码不会改变。

这个问题我曾经问过很多人都没有回答,希望各位专家,老手给与解答!!

谢谢!!

网友回复:create table ddd(id int identity(1,1)......


这样就行
网友回复:然后用于显示时再进行转换

select right('000000' ltrim(id),4)
网友回复:为什么要在数据库中设置呢,在读取的时候设置不可以吗?

---例子
id 是自增列

select right('0000' id,4) 这种形式不可以吗?
网友回复:第二种方法:

ID 为 char(4)

在表上装触发器 AFTER或INSTEAD OF都行



网友回复:也可以把自增列的起始值设为 10000 ,然后在读取的时候 left(id,4) 这样也可以, 对于你说的那个记录编号从0001到1000,删除0050,其他的号码不会改变,这个是什么意思没有明白

 


网友回复:我是这个意思:自动编号前面是0,后面的数字是自动编号,另外举个例子就是 :A001,下一个编号就是:A002,第一百个编号就是:A100

我的数据库已经建好了,怎么再使用触发器啊?触发器代码怎么写?麻烦具体告知,我是初学者。谢谢!!
网友回复:这样不行
自动编号,只能是int数据类型

当 titles 表更改时,下例将电子邮件发送给指定的人员 (MaryM)。

USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'reminder' AND type = 'TR')
DROP TRIGGER reminder
GO
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE, DELETE
AS
EXEC master..xp_sendmail 'MaryM',
'Don''t forget to print a report for the distributors.'
GO


网友回复:假如你想要 A001 这种形式,也可以在读取的时候做啊, select 'A' right('000' id,3) -- 这里的id是自增列



别外你的数据库已经建好了,你是怎么建的?
网友回复:----例子

select 自动编号='A' right('000' rtrim(1),3)

/* 结果

自动编号
-------
A001

*/
网友回复:我的数据库不是用程序代码写的是从企业治理器中建立的,只设置了主键,别的没有动!!现在怎么才能修改啊?谢谢!!
网友回复:LZ要求是自动生成的吧?


网友回复:leo_lesley

你的方法能够编号到A100吗?

假如可以那我就试试!!

代码怎么添加,添加在哪里啊??

我的数据库不是用程序代码写的是从企业治理器中建立的,只设置了主键,别的没有动!!现在怎么才能修改啊?谢谢!!
网友回复:用计算列实现吧。就是多出一个列来。
网友回复:你的方法能够编号到A100吗? 这个是什么意思没明白


你的表是怎么建的,只要主键是自增列,在读取的时候select 自动编号='A' right('000' rtrim(自增列),3) from 表名 这样就可以了
网友回复:看下面方法行不行,用到计算列实现

SQL code


Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





CREATE TABLE [dbo].[tb1] (

    [autoid] [int] IDENTITY (1, 1) NOT NULL ,

    [myid] AS (right(str((10000   [autoid])),4)) ,

    [mytext] [char] (10) 

)





insert into tb1 (mytext) values('qqqq')

insert into tb1 (mytext) values('bbbbb')

insert into tb1 (mytext) values('fffff')

insert into tb1 (mytext) values('tttt')



select * from tb1



/*

autoid      myid     mytext     

----------- -------- ---------- 

          1 0001     qqqq      

          2 0002     bbbbb     

          3 0003     fffff     

          4 0004     tttt      



(所影响的行数为 4 行)

*/



  

网友回复:楼上的兄弟,你的方法似乎不能让0005自动生成编号!!

不过还是感谢你的支持!!

谢谢!!
网友回复:
使用自增就应该可以了

你若想生成A 0000的形式
也可新加一列,并自动编码,
SQL code


Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





--drop table tes

--go

--建表

create table tes (coding varchar(20) not null,a int)

go

--新建个函数

--drop function [dbo].[AutoGetCoding]

create function [dbo].[AutoGetCoding](@date datetime)

returns varchar(5)

as

begin

declare @str varchar(5)

select @str=isnull(max(coding),'A0000') 

from tes

select @str=left(@str,1) right('0000' convert(varchar(4),convert(int,right(@str,4)) 1),4)

return (@str)

end

--把表的默认值设置成[dbo].[AutoFollowExamCode](getdate())

--测试

go

--加约束

ALTER TABLE dbo.tes ADD CONSTRAINT

DF_t_coding DEFAULT [dbo].[AutoGetCoding](getdate()) FOR coding

--删除测试数据

go

--

declare @i int

select @i=8

while @i>0

begin

insert into tes(a) values ('1')

select @i=@i-1

end

--显示结果

go

select * from tes

/*coding               a

-------------------- -----------

A0001                1

A0002                1

A0003                1

A0004                1

A0005                1

A0006                1

A0007                1

A0008                1

*/
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值