怎样由SQL Server 2000 系统自动编号 生成格式如:BV+YYYYMM+编号 BV是固定字符 YYYYMM是年月 编号是0到9的数字
最佳答案
使用触发器来实现
create table test(
id varchar(20),
sname varchar(20)
)
create TRIGGER [test_insert] ON [dbo].[test]
INSTEAD OF INSERT
AS
declare @str varchar(20)
declare @i integer
set @str = 'BV'+left(convert(char,getdate(),112),6)
select @i=isnull(max(cast(right(rtrim(id),len(id)-8) as integer)),0) from
(select id from test where id like @str+'%') a
set @i=@i+1
INSERT INTO TEST
SELECT @STR++cast(@i as char)as id,sname from inserted
上面建好后执行:
insert into test(sname) values('test')
id字段会自动编好号
我的项目里也用到这种模式 但有点不好,灵活性太差,逻辑判断都放在程序里,我刚写的改进下。 CREATE PROC CreateMaxNum ( @NumberHeader NVARCHAR(40) --号码单头类型 ) DECLARE @NumberHeader NVARCHAR(40), --编号头 @NumberMiddle CHAR(8), --编号中间规则 @MaxNum CHAR(8), --编号最大流水号 @SQL NVARCHAR(4000) SET @NumberMiddle= CONVERT(CHAR(8),GETDATE(),112) --设置中间编码规则 SET @SQL = 'SELECT @Num=RIGHT(''0000''+LTRIM(MAX(RIGHT(号码,4))+1),4) FROM 号码表 WHERE 号码 LIKE '''+ @NumberHeader+'%'' '; EXEC sp_executesql @Sql,N'@Num NVARCHAR(40) OUTPUT',@MaxNum OUT IF @MaxNum IS NULL --不存在该类型的号码,插入流水号为1的号码, BEGIN SELECT @NumberHeader + @NumberMiddle + '0001' END ELSE BEGIN --生成最大流水号 SELECT @NumberHeader + @NumberMiddle + @MaxNum END
浙公网安备 33010602011771号