为以特定格式插入自动增量列创建 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
这是我尝试以这种格式 "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