--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(8)
AS
BEGIN
RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))
END
GO
--在表中应用函数
CREATE TABLE tb(
BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)
--插入资料
BEGIN TRAN
INSERT tb(col) VALUES(1)
INSERT tb(col) VALUES(2)
INSERT tb(col) VALUES(3)
DELETE tb WHERE col=3
INSERT tb(col) VALUES(4)
INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)
COMMIT TRAN
--显示结果
SELECT * FROM tb
/*--结果
BH col
---------------- -----------
BH000001 1
BH000002 2
BH000003 4
BH000004 14
--*/ --另一种方法--种子表 num_tb
if object_id('num_tb') is not null
drop table num_tb
go
create table num_tb(d datetime,id int)
insert num_tb select getdate(),1
if object_id('tb') is not null
drop table tb
go
create table tb(id varchar(20),name varchar(10))
create clustered index idx_clu_tb on tb(id)
go
create trigger tri_tb on tb INSTEAD OF INSERT
as
begin
set nocount on
declare @i int,@id varchar(20),@j int
select @i=count(*) from inserted
begin tran
update num_tb with(TABLOCKX) set
id=(case when convert(char(8),d,112)=convert(char(8),getdate(),112)
then id+@i else @i end),
@j=(case when convert(char(8),d,112)=convert(char(8),getdate(),112) then id else 0 end),
d=getdate()
commit tran
select * into #t from inserted
update #t set id=convert(varchar(8),getdate(),112)+right('00000'+rtrim(@j),5),@j=@j+1
insert tb select * from #t
end
go
--插入记录测试
insert into tb(name) values('张三')
insert into tb(name) values('李四')
select * from tb
/*
id name
-------------------- ----------
2010012700002张三
2010012700003李四
*/
insert into tb select '2010012700003','王五'
/*
id name
-------------------- ----------
2010012700002张三
2010012700003李四
2010012700004王五
*/
这里Oracle数据库使用命令行 *** 作,注意Oracle不能直接设置自增字段,需要使用序列+触发器来实现。1.创建Book表
Create table Book(
Id NUMBER(6) constraint s_PK primary key,
Title nvarchar2(200) not null,
Author nvarchar2(200) not null,
Publisher nvarchar2(200) not null,
ISBN nvarchar2(50) not null,
Price NUMBER(6,2) not null,
CategoryName nvarchar2(50) not null,
Description nvarchar2(1000) not null,
ImageName varchar2(50)
)
2.创建自增序列
create sequence BOOK_seq(BOOK_seq为序列名,任意取)
increment by 1 (increment 表示字段逐条增加1)
start with 1(设置自增序列的初始值为1)
nomaxvalue (不限制自增序列的最大值)
minvalue 1 (设置自增序列的最小值为1)
3.试用一下,向BOOK表中插入一条数据,Id列就引用了自增序列。
insert into BOOK values(BOOK_seq.nextval,'a','a','a','a',32.1,'a',
'a','1.jpg')
注意:
*** 作之后记得输入“commit“保存 *** 作。
Oracle数据库的的命令行创建表,系统会自动转化为大写字母,假如使用数据库 *** 作客户端,那么建表等 *** 作时记得字段名大写。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)