CREATE FUNCTION dbo.GetNewPdtNo
(@sPdtType CHAR(1),
 @dNow VARCHAR(10)
)
RETURNS CHAR(10)
AS
BEGIN
DECLARE @RowCnt INT
DECLARE @M VARCHAR(10)
SELECT @RowCnt=COALESCE(SUM(PdtType),0)+1
FROM t_Main
WHERE PdtType=@sPdtType
SET @M='M'+@sPdtType+LEFT(@dNow,4)+RIGHT('00'+CONVERT(VARCHAR,@RowCnt),3)
RETURNS @M
END把編號欄位的default值設為dbo.GetNewPdtNo(產品類型,CONVERT(VARCHAR(10),GETDATE(),12))就好了。

解决方案 »

  1.   

    create trigger tr_T_Mind_insert
    on T_Mind
    for insert
    as
    if @@rowcount>1 
     begin
       RAISERROR ('error insert many rows',16,1)
       ROLLBACK TRANSACTION
     enddeclare @code varchar(20)
    declare @code1 varchar(20)
    select @code1='M'+产品类型+convert(varchar(4),getdate(),112)  from inserted
    if not exists (select * from T_Mind where 产品编号 like @code1+'%')
      set @code=@code1+'001'
    else
      select @Code=@code1+right('000'+cast(cast(right(max(产品编号),3)+1 as int) as varchar(3),3) from T_Mind where 产品编号 like @code1+'%'update T_Mind
    set 产品编号=@code
    from T_Mind t,inserted i
    where t.序号=i.序号
    and t.产品类型=i.产品类型go注意:你的例子最后一行应该有错误,如果你的例子没有错误,那说明你的表没有主键,那样这个触发器会有问题。