--创建
create procedure p_srl
as
select (convert(char(6),getdate(),12) +
replace(convert(char(12),getdate(),14),':','') +
right(newid(),6))
--执行
exec p_srl
--主键用随机数难以保证唯一,在生成主键上要多做校验工作
--处理示例
--创建一个视图,生成编号
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
--删除测试
drop table tb
drop view v_getno
drop function f_no
/*--结果
bh name
--------------------- ----------
0504011356565904832EF 李三
050401135656590EF57B2 张三
(所影响的行数为 2 行)
--*/
--建立用流水号,这样不必为校验生成的编号是否重复而浪费时间
--处理示例
--创建一个视图,得到当前日期信息
create view v_getdate
as
select dt=convert(char(6),getdate(),12)
+replace(convert(varchar(12),getdate(),14),':','')
go
--创建一个函数,取得新编号
create function f_No() returns char(21)
as
begin
declare @re char(15)
select @re=dt from v_getdate
return(
select @re+right(1000001+isnull(right(max(bh),6),0),6)
from tb
where bh like @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
--删除测试
drop table tb
drop view v_getdate
drop function f_no
/*--结果
bh name
--------------------- ----------
050401140128590000001 张三
050401140128590000002 李三
(所影响的行数为 2 行)
--*/