-主键用随机数难以保证唯一,在生成主键上要多做校验工作 --处理示例 --创建一个视图,生成编号 create view v_getNo as select No=convert(char(6),getdate(),12) +replace(convert(varchar(12),getdate(),14),':','') +right(newid(),6) go --创建一个函数,目的是得到不重复的一个编号 create function f_No() returns char(21) as begin declare @re char(21) select @re=No from v_getNo while exists(select * from tb where bh=@re) select @re=No from v_getNo return(@re) end go --创建表,使用这具函数 create table tb(bh char(21) primary key default dbo.f_no(),name varchar(10)) insert tb(name) values('张三') insert tb(name) values('李三') select * from tb go 使用时 注意修改 表名 列名。 ---------------------------------- 在学习中遇到这个问题 数据库里有编号字段 BH00001 BH00002 BH00003 BH00004 如何实现自动增长 --下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。 --得到新编号的函数 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 --*/ create table tb (id int identity, name varchar(10), code as 'BH'+right('0000'+cast(id as varchar),5)) go insert tb(name) select 'A' union all select 'B' union all select 'C' union all select 'D' select * from tb drop table tb /* id name code ----------- ---------- ------------ 1 A BH00001 2 B BH00002 3 C BH00003 4 D BH00004 (所影响的行数为 4 行)