Я отлаживаю конвейер данных, который состоит из нескольких таблиц и триггеров.
У нас есть таблица с именем 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
поле), и я не могу понять, где проблема. Может быть, процессы не используют транзакции? Что-то не так с запросом?
Любая помощь будет принята с благодарностью.