这个你看看,可能对你有帮助--1.融合了补号处理的流水号编号处理
--下面是使用补号法生成流水编号的用户定义函数,生成的编号总长度为8位,以BH开头,其余6位为流水号。--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(8)
AS
BEGIN
DECLARE @r char(8)

SELECT @r='BH'+RIGHT(1000001+MIN(BH),6)
FROM(
SELECT BH=RIGHT(BH,6) FROM tb WITH(XLOCK,PAGLOCK)
UNION ALL SELECT 0
)a WHERE NOT EXISTS(
SELECT * FROM tb  WITH(XLOCK,PAGLOCK)
WHERE BH='BH'+RIGHT(1000001+a.BH,6))
RETURN(@r)
END
GO--在表中应用函数
CREATE TABLE tb(
BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)
GO
/*==================================================*/--2.融合了补号处理的日期编号处理
--下面是使用补号法生成日期编号的用户定义函数,生成的编号总长度为12,前6位为日期信息,格式为YYMMDD,后6位为流水号。--创建得到当前日期的视图
CREATE VIEW v_GetDate
AS
SELECT dt=CONVERT(CHAR(6),GETDATE(),12)
GO--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(12)
AS
BEGIN
DECLARE @dt CHAR(6),@r char(12)
SELECT @dt=dt FROM v_GetDate SELECT @r=@dt+RIGHT(1000001+MIN(BH),6)
FROM(
SELECT BH=RIGHT(BH,6) FROM tb WITH(XLOCK,PAGLOCK)
WHERE BH like @dt+'%'
UNION ALL SELECT 0
)a WHERE NOT EXISTS(
SELECT * FROM tb  WITH(XLOCK,PAGLOCK)
WHERE BH like @dt+'%'
AND BH=@dt+RIGHT(1000001+a.BH,6))
RETURN(@r)
END
GO--在表中应用函数
CREATE TABLE tb(
BH char(12) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)

解决方案 »

  1.   

    本帖最后由 fcuandy 于 2008-12-26 15:44:31 编辑
      

  2.   

    给id 为空值的 分配一个id 号。
    id           name
    ------------------
    0208120001  王倩
    0208120002  小由
    0508120001  nicole
    0208120003  毛豆
    0208120004  刘春霞
    0508120002  王斯琪
    0208120005  王雪儿
    0608120002  陈钟宁
    0608120003  李先生
    0608120004  左琳
    0608120005  带到
                 王弘毅
                 常志军
                 陈亚苹(王雨云、王震宇)
                 石昕成
                 唐紫薇
                 商文斌
                 黄晋漪
                 边城
                 甄真
                 李露铭
                 周娜
                 蔡黄思桐
                 卢鹤京
                 赵梦圆
                 杨洋
                 方国帆