У меня есть база данных SQL Server 2008. К нему подключены три терминала (A, B, C). В базе данных есть таблица SampleTable
, которая реагирует на любую деятельность терминала. Каждый раз, когда на каком-либо терминале есть какая-либо активность, вошедшая в этот БД, новая строка вставляется в SampleTable
.Запретная вставка в таблицу при определенных условиях
Я хочу перенаправить трафик с одного (C) трех терминалов на запись в таблицу RealTable, а не на SampleTable, но я должен сделать это на уровне DB, поскольку службы, которые записывают активность терминала в DB, находятся в Black Box.
У меня уже есть триггеры, работающие на SampleTable
с логикой перенаправления, но проблема в том, что строки все еще вставлены в SampleTable
.
Какое самое чистое решение для этого. Я уверен, что удаление строк в триггере ввода плохо, плохо, плохо.
Пожалуйста, помогите.
Edit:
Наша текущая логика что-то вроде этого (это псевдо-код):
ALTER TRIGGER DiffByTerminal
ON SampleTable
AFTER INSERT
AS
DECLARE @ActionCode VARCHAR(3),
@ActionTime DATETIME,
@TerminalId INT
SELECT @ActionCode = ins.ActionCode,
@ActionTime = ins.ActionTime,
@TerminalId = ins.TerminalId
FROM inserted ins
IF(@TerminalId = 'C')
BEGIN
INSERT INTO RealTable
(
...
)
VALUES
(
@ActionCode,
@ActionTime,
@TerminalId
)
END
Что такое триггер? Самый чистый, вероятно, нужно вставить через хранимую процедуру, чтобы у вас было красивое место для добавления дополнительной логики. –
Какова ваша существующая логика? Это звучит как идеальное использование для триггера «INSTEAD OF» – JNK
Мы не можем изменить логику вставки строки, поэтому она должна быть триггером или что-то вроде триггера. @JNK Пожалуйста, см. Мой отредактированный ответ. – nzic