我有以下两个表:
-
ITEMS
(ID |代码 |NAME):将项目添加到表中,并根据计数器表分配新代码 -
COUNTERS
(ID |年份 |计数器):每年有一行,每年添加新行并将计数器设置为零。
我想在每次插入新项目时增加当前年份的计数器,并在当前项目的代码列中分配格式化计数器。
例:
- 插入一个新项目:
ID=34, CODE=null, NAME=productName
- 当年的计数器递增:
ID=1, YEAR=2019, COUNTER=34
- 计数器值分配给代码列:
ID=34, CODE=CE201934, NAME=productName
如何创建执行此任务的触发器?如果当前年份发生变化,触发器必须在计数器表上添加新行。
INSERT INTO ITEMS(ID,CODE,NAME)
VALUES(34,NULL,'ProductName')
DECLARE @ID INT = SCOPE_IDENTITY();
IF NOT EXISTS(SELECT * FROM Counters WHERE ID = @ID AND [Year] = YEAR(GETDATE()))
BEGIN
INSERT INTO Counters
(
ID
,Year
,Counter
)
VALUES(@ID,YEAR(GETDATE()),SELECT MAX(Counter)+1 FROM Counters WHERE ID = @ID AND [Year] = YEAR(GETDATE()))
END
DECLARE @Code BIGINT = SCOPE_IDENTITY();
UPDATE ITEMS
SET Code = @Code
WHERE ID = @ID