Триггер обновляет остальные значения таблицы после заполнения одного атрибута. - PullRequest
0 голосов
/ 17 февраля 2020

Я хочу создать триггер, который бы заполнял остальные значения в таблице после вставки одного атрибута.

Так что, как только дата будет вставлена, мне нужен триггер для заполнения остальных столбцов.

CREATE TABLE dim_date 
(
    Date_Id INTEGER
        CONSTRAINT date_id_pk PRIMARY KEY IDENTITY (1,1),
    CalendarDate DATE NOT NULL,
    CalendarYear VARCHAR (20),
    CalendarQuarter VARCHAR (20),
    CalendarMonth VARCHAR (20),
    CalendarMonthNumber SMALLINT,
    CalendarDateNumber SMALLINT,
    CalendarYearNumber SMALLINT,
    CalendarQuarterNumber CHAR(1),
    CalendarWeek SMALLINT,
    CalendarWeekdayNumber Char(1),
    CalendarWeekday VARCHAR (20),
    CalendarWeekNumber SMALLINT,
    CalendarHalf CHAR(1)
);

INSERT INTO dim_date (CalendarDate) 
VALUES ('2018-07-26'),
       ('2017-05-02'),
       ('2015-09-10'),
       ('2017-04-23');

CREATE TRIGGER trg_date ON dim_date
FOR INSERT
AS 
    UPDATE dim_date 
    SET CalendarYear = (SELECT YEAR(CalendarDate) FROM INSERTED)
    WHERE -- not sure how to proceed from here
GO

1 Ответ

0 голосов
/ 17 февраля 2020

В основном вам нужно использовать правильно реляционный подход, основанный на множествах - путем присоединения к псевдотаблице Inserted и установки информации части даты для этих вновь вставленных строк.

Что-то вроде этого:

CREATE TRIGGER trg_date 
ON dim_date
FOR INSERT
AS 
    UPDATE dd
    SET CalendarYear = YEAR(dd.CalendarDate),
        CalendarQuarter = DATEPART(Quarter, dd.CalendarDate),
        CalendarMonthNumber = MONTH(dd.CalendarDate)
        -- and so on, for all the other DATEPART pieces you need

    FROM dim_date dd
    -- join on the primary key to update all rows that were newly inserted only
    INNER JOIN Inserted i ON dd.Date_Id = i.Date_Id 
GO

Теперь вам просто нужно заполнить оставшиеся части даты, которые вам нужно определить - проверьте официальную документацию MS по DATEPART для получения информации !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...