2013-02-20 2 views
0

У меня есть триггер, чтобы скопировать данные из таблицы А в таблице В, когда таблица А изменяетсяSQL триггер INSERT Сервер не работает

триггер так:

ALTER TRIGGER ATrigger 
ON A AFTER INSERT, DELETE, UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DELETE FROM B WHERE id IN (SELECT id FROM deleted) 

    INSERT INTO B(Id, col1,col2) (SELECT i.Id, i.col1, i.col2 FROM inserted i) 
END 

Но я вижу не все данные, вставленные в A, скопированы в B, скопированные данные кажутся очень случайными. Я искал вокруг, обнаружил, что это может быть вызвано несколькими вставками, кто-то предлагает использовать cusor, но я думаю, что для меня это должно быть хорошо вставить или удалить из вставленной удаленной таблицы, используя этот два sql.

Пожалуйста, сообщите, спасибо!

+0

Что значит «multi insert»? –

+0

@IswantoSan Он означает «объемная вставка». –

+0

Ваш триггер кажется прекрасным для удаления и вставки. Как насчет обновления? –

ответ

1

Я не уверен, что это ваша проблема, но ваш триггер имеет 2 "gotchas". Сначала на вставке удаленная таблица не будет содержать никаких строк, поэтому никаких удалений не будет. Во-вторых, это обратная и потенциально ваша проблема. При удалении вставленная таблица не имеет строк. Таким образом, все идентификаторы будут удалены из таблицы B, но не будут повторно вставлены. Вдобавок к этому, если идентификатор не является уникальным ключом для таблицы A, тогда, когда вы вставляете вторую копию, вы удаляете всю свою историю в таблице B и добавляете только «новую» историю.

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

Смежные вопросы