use master
go
if exists(select * from sysdatabases where name='TabDB')
drop database TabDB
--删除数据库
create database TabDB--数据库名
on primary
(
name='TabDB_Data', --主数据文件的逻辑名
filename='E:\TabDB_data.MDF', --主数据文件的物理名
size=1MB, --主数据文件初始大小
maxsize=100MB, --主数据文件增长的最大值
filegrowth=15% --主数据文件的增长率
)
log on
(
name='TabDB_Log',
filename='E:\TabDB_log.LDF',
size=1MB,
filegrowth=15%
)
go
/*------------建表----------------*/
use TabDB
go
set nocount on --不显示影响行数
if exists (select * from sysobjects where name='tableInfo')
drop table tableInfo
go
create table tableInfo
(
tableName varchar(10) not null,--表名
Tb char(2) not null, --简写
Ke char(9) --最后插入的主建
)
go
if exists (select * from sysobjects where name='classID')
drop table classID
go
create table classID
(
classNO varchar(10) not null,--编号
className varchar(10) --名称
)
insert into tableInfo(tableName,Tb)
select 'student','ST'union
select 'teacher','TC'union
select 'classID','AT'
select * from tableInfo
select * from classID
if exists(select * from sysobjects where name='proc_aaa')
drop proc proc_aaa
go
--创建存储过程
create procedure proc_aaa
@ccc char(9) output,
@TableName char(10)='classID'
as
set nocount on --不显示行数信息
declare @date datetime --获取系统时间
declare @nameNo char(9)--存储序号
declare @Tb char(2)--简写
declare @Time char(18)--系统时间
declare @n char(2)--年
declare @y char(2) --月
declare @No char(9)--获取序号
select @Tb=Tb from tableInfo where tableName=@TableName--获取简写
set @date=getdate()--获取系统时间
set @Time=convert(char(18),@date)--把时间转换为字符串
set @n=substring(@Time,9,10)--获取年
set @y=substring(@Time,1,2)--获取月
select @nameNo=Ke from tableInfo where TableName=@TableName--获取信息表中的主键值
if (@nameNo is null)--判断信息表中的主键值是否为空
begin
set @nameNo=@Tb+@n+@y+'000'--从 0 开始
end
else
begin
if(@n=substring(@nameNo,3,2)) --判断年份是否改变
begin
if(@y=substring(@nameNo,5,2))--判断月份是否改变
select @nameNo=Ke from tableInfo where TableName=@TableName
else
set @nameNo=@Tb+@n+@y+'000'--从 0 开始
end
else
set @nameNo=@Tb+@n+@y+'000'--从 0 开始
end
update tableInfo set ke=@nameNo where TableName=@TableName
select @No=Ke from tableInfo where TableName=@TableName
declare @nnn char(3)
set @nnn=substring(@No,7,9)
if (convert(int,@nnn)>=999)
begin
raiserror('不能在产生序号',16,1)
return ---立即返回,退出存储过程
end
set @nnn=convert(int,@nnn+1)
set @nameNo = convert(char(3),@nnn)
declare @lth int
set @lth = len(@nameNo)
select @nnn=replicate('0',3-@lth)+@nameNo
set @nameNo=@Tb+@n+@y+@nnn
update tableInfo set ke=@nameNo where TableName=@TableName
set @ccc=@nameNo
go