SQL Триггер сервера, вставка дубликатов - PullRequest
0 голосов
/ 10 января 2020

Я отлаживаю конвейер данных, который состоит из нескольких таблиц и триггеров.

У нас есть таблица с именем Dimension_Date, определенная так:

CREATE TABLE [dbo].[Dimension_Date]
(
    [id_date] [bigint] IDENTITY(1,1) NOT NULL,
    [a_date] [datetime] NOT NULL,
    [yoy_date] [date] NOT NULL
)

У нас также есть три разных таблицы, в которые другие процессы вставляют данные (с транзакциями, хотя у меня нет доступа к этим процессам). Каждая таблица содержит столбец Datetime (x_date), который необходимо вставить в таблицу Dimension, только если эта дата и время еще не существуют в таблице Dimension. Если он уже существует, его не следует вставлять.

В каждой из этих таблиц есть триггер, который, помимо прочего, проверяет, существует ли дата и время в таблице Dimension и нет , вставляет новую дату. Как только все действия выполнены, содержимое TABLE_1, 2 и 3 удаляется. Триггеры (таблиц TABLE_1, 2 и 3) содержат следующий запрос:

CREATE TRIGGER [dbo].[insert_Date_Trigger] 
ON [dbo].[TABLE_1]
AFTER INSERT
AS
BEGIN
    INSERT INTO Dimension_Date (a_date, yoy_date)
        SELECT DISTINCT x_date, DateADD(yy, -100, CONVERT(date, x_date)) 
        FROM TABLE_1
        WHERE NOT EXISTS (SELECT id_date FROM Dimension_Date 
                          WHERE a_date = TABLE_1.a_date);

        (...)

        DELETE FROM TABLE_1
END

Проблема заключается в том, что эти триггеры вставляют дубликаты в таблицу измерений (два разных id_date для одного и того же a_date поле), и я не могу понять, где проблема. Может быть, процессы не используют транзакции? Что-то не так с запросом?

Любая помощь будет принята с благодарностью.

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