SQL Server语言 - 使用计数器插入时触发



我有以下两个表:

  • 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

最新更新