可以同用一个编码表
如下
只是简单的人
复杂的可分为两个表--建表
create table infoTableNo
(
NoId int primary key,
NoName varchar(200),
NoTypeId int, --编号类型(如:流水号,年月流水号,年月日流水号)
Prefix varchar(20), --前缀
CurrentNo int, --当前数字编号
NoPartLen int, --编号数字部分长度
UpdateDate char(8) --格式:20060517
)insert infoTableNo
select 1,'订单号',1,'ORD',0,4,''
select 2,'制造批号',1,'MRD',0,5,''
/*----------------------------------------
--创建表编号
--yys 2006/05/17
*/
create proc CreateTableNo
(
@ReturnCode int=0 output,
@ReturnCount int=0 output,
@NewNo varchar(100) output,
@NoId int--编号标识
)
as
--当前日期
declare @CurrentDate char(8)
set @CurrentDate=convert(char(8),getdate(),112)
begin transaction
--读取当天最新编号信息
declare @Prefix varchar(20) --前缀
declare @CurrentNo int --当前数字编号
declare @NoPartLen int --编号数字部分长度
declare @UpdateDate char(8) --最新更新日期
select
@Prefix=Prefix,
@CurrentNo=CurrentNo,
@NoPartLen=NoPartLen,
@UpdateDate=UpdateDate
from infoTableNo with(PAGLOCK)
where NoId=@NoIdselect @ReturnCode=@@error,@ReturnCount=@@rowcount
if @ReturnCode<>0 or @ReturnCount =0 goto RollbackAndReturn--这里只处理年月日流水号
if @UpdateDate=@CurrentDate
begin
--判断数字编号是否在允许范围内
set @CurrentNo=@CurrentNo+1
if @CurrentNo>cast(replicate('9',@NoPartLen) as int)
begin
select @ReturnCode=2,@ReturnCount=0
goto RollbackAndReturn
end --生产新的编号
set @NewNo=@Prefix+@CurrentDate+
replicate('0',@NoPartLen-len(@CurrentNo))+cast(@CurrentNo as varchar(20))
end
else
begin
set @CurrentNo=1
--生产新的编号
set @NewNo=@Prefix+@CurrentDate+
replicate('0',@NoPartLen-len(@CurrentNo))+cast(@CurrentNo as varchar(20))
end --更新当前编号信息
update infoTableNo
set
CurrentNo=@CurrentNo,
UpdateDate=@CurrentDate
where NoId=@NoIdselect @ReturnCode=@@error,@ReturnCount=@@rowcount
if @ReturnCode<>0 or @ReturnCount =0 goto RollbackAndReturnCommitAndReturn:
commit transaction
goto ReturnResult
RollbackAndReturn:
rollback transaction
return
ReturnResult:
return
--测试
declare @ReturnCode int
declare @ReturnCount int
declare @NewNo varchar(100)exec CreateTableNo @ReturnCode output,@ReturnCount output,@NewNo output,1print @ReturnCode
print @ReturnCount
print @NewNo--结果
0
1
ORD200605170004
如下
只是简单的人
复杂的可分为两个表--建表
create table infoTableNo
(
NoId int primary key,
NoName varchar(200),
NoTypeId int, --编号类型(如:流水号,年月流水号,年月日流水号)
Prefix varchar(20), --前缀
CurrentNo int, --当前数字编号
NoPartLen int, --编号数字部分长度
UpdateDate char(8) --格式:20060517
)insert infoTableNo
select 1,'订单号',1,'ORD',0,4,''
select 2,'制造批号',1,'MRD',0,5,''
/*----------------------------------------
--创建表编号
--yys 2006/05/17
*/
create proc CreateTableNo
(
@ReturnCode int=0 output,
@ReturnCount int=0 output,
@NewNo varchar(100) output,
@NoId int--编号标识
)
as
--当前日期
declare @CurrentDate char(8)
set @CurrentDate=convert(char(8),getdate(),112)
begin transaction
--读取当天最新编号信息
declare @Prefix varchar(20) --前缀
declare @CurrentNo int --当前数字编号
declare @NoPartLen int --编号数字部分长度
declare @UpdateDate char(8) --最新更新日期
select
@Prefix=Prefix,
@CurrentNo=CurrentNo,
@NoPartLen=NoPartLen,
@UpdateDate=UpdateDate
from infoTableNo with(PAGLOCK)
where NoId=@NoIdselect @ReturnCode=@@error,@ReturnCount=@@rowcount
if @ReturnCode<>0 or @ReturnCount =0 goto RollbackAndReturn--这里只处理年月日流水号
if @UpdateDate=@CurrentDate
begin
--判断数字编号是否在允许范围内
set @CurrentNo=@CurrentNo+1
if @CurrentNo>cast(replicate('9',@NoPartLen) as int)
begin
select @ReturnCode=2,@ReturnCount=0
goto RollbackAndReturn
end --生产新的编号
set @NewNo=@Prefix+@CurrentDate+
replicate('0',@NoPartLen-len(@CurrentNo))+cast(@CurrentNo as varchar(20))
end
else
begin
set @CurrentNo=1
--生产新的编号
set @NewNo=@Prefix+@CurrentDate+
replicate('0',@NoPartLen-len(@CurrentNo))+cast(@CurrentNo as varchar(20))
end --更新当前编号信息
update infoTableNo
set
CurrentNo=@CurrentNo,
UpdateDate=@CurrentDate
where NoId=@NoIdselect @ReturnCode=@@error,@ReturnCount=@@rowcount
if @ReturnCode<>0 or @ReturnCount =0 goto RollbackAndReturnCommitAndReturn:
commit transaction
goto ReturnResult
RollbackAndReturn:
rollback transaction
return
ReturnResult:
return
--测试
declare @ReturnCode int
declare @ReturnCount int
declare @NewNo varchar(100)exec CreateTableNo @ReturnCode output,@ReturnCount output,@NewNo output,1print @ReturnCode
print @ReturnCount
print @NewNo--结果
0
1
ORD200605170004
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
***********************************************--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
比如一个表
ID | 字段1 | 字段2 | 字段3
那我
insert 表(字段1,字段2,字段3)(值,值,值)
这个ID的值怎么调用这个存储过程自动插入