怎样由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
posted on 2011-03-30 00:32  #阿志#  阅读(136)  评论(0)    收藏  举报