为以特定格式插入自动增量列创建 SQL 触发器

Create SQL trigger for insert auto increment column in specific format

这是我尝试以这种格式 "ADDDMMYYYYxxxx" 插入到 TID 列中的 table 任务中的代码。输出值为NULL

create table Task
(
    TID nvarchar(50) default 'QA201712120000' 
);
go


create trigger insertTask
on Task
after insert as
begin
    update Task set TID=
    'QA' + REPLACE(CONVERT(CHAR(10), GETDATE(), 103), '/', '') +
    RIGHT( '000' + CAST(SCOPE_IDENTITY() AS VARCHAR(4)) ,  4 ) 
end


insert into Task default values;

尝试下面的示例代码。

create table Task
(
    ID int not null identity (1,1) primary key,
    TID nvarchar(50) default 'QA201712120000' 
);
go

create trigger insertTask
on Task
after insert as
begin
    update Task
    set TID = 'QA' + REPLACE(CONVERT(CHAR(10), GETDATE(), 103), '/', '')
                   + RIGHT( '000' + CAST(inserted.ID AS VARCHAR(4)), 4)
    from Task
    join inserted on inserted.ID = Task.ID;
end;
go

insert into Task default values;
insert into Task default values;
insert into Task default values;

select * from Task;

此解决方案的特点:

  • 仅更新​​新插入的记录 - 上一个示例已更新 整个table
  • 在每条记录的基础上应用正确的 ID 值 - 上一个示例使用了从 SCOPE_IDENTITY()
  • 派生的全局值

在 [dbo].[T_Registration] 上创建触发器 [dbo]。[Tr_GenerateRegistrationNo] 插入后 作为

    DECLARE @regisId BIGINT ,
        @registrationNo VARCHAR(20)  
    SELECT  @regisId = regisId FROM inserted

    SELECT  @registrationNo=  'AUTO'+  RIGHT('0000000'
                                                + CONVERT(VARCHAR(20), @regisId),
                                                7)

     UPDATE  T_Registration SET  registrationNo = @registrationNo   WHERE   regisId = @regisId