SQL Server - триггер при вставке со счетчиком - PullRequest
0 голосов
/ 10 января 2019

У меня есть следующие две таблицы:

  • ITEMS (ID | CODE | NAME): элементы добавляются к элементам таблицы и назначается новый код на основе таблицы счетчиков

  • COUNTERS (ID | YEAR | COUNTER): для каждого года существует строка, каждый год добавляется новая строка и счетчик устанавливается на ноль.

Я хотел бы увеличивать счетчик текущего года при каждой вставке нового элемента и назначать форматированный счетчик в столбце кода текущего элемента.

Пример:

  • Добавлен новый элемент: ID=34, CODE=null, NAME=productName
  • Счетчик текущего года увеличивается: ID=1, YEAR=2019, COUNTER=34
  • Значение счетчика присваивается столбцу кода: ID=34, CODE=CE201934, NAME=productName

Как я могу создать триггер, который выполняет эту задачу? Триггер должен добавить новую строку в таблицу счетчиков при изменении текущего года.

1 Ответ

0 голосов
/ 10 января 2019
    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...