2014-08-28 5 views
0

Как создать триггер, который обновляет столбец в таблице, когда обновляется другой столбец в той же таблице.Создайте триггер, который обновляет столбец в таблице, когда обновляется другой столбец в той же таблице. SQL

До сих пор я выполнял следующее, которое работает при создании любых новых данных. Его способность копировать данные из «заявки» в «PO_Number», однако, когда данные были изменены в «Заявке», никаких изменений в «PO_Number» не происходит, и значение становится NULL. Любые виды помощи будут серьезно оценены.

ALTER TRIGGER [dbo].[PO_Number_Trigger] 
ON [dbo].[TheCat2] 
AFTER INSERT 
AS BEGIN 

    UPDATE dbo.TheCat2 SET PO_Number=(select Purchase_Requisition from inserted) where DocNo= (Select DocNo from inserted); 
    END 
+3

Ваш триггер не является безопасным для партии .... –

ответ

0

Это может делать то, что вы хотите: Ваш триггер изменяет все строки в TheCat2. Предположительно, вы только хотите, чтобы изменить новые:

ALTER TRIGGER [dbo].[PO_Number_Trigger] 
ON [dbo].[TheCat2] AFTER INSERT 
AS 
BEGIN 
    UPDATE tc 
     SET PO_Number = Purchase_Requisition 
     FROM dbo.TheCat2 tc JOIN 
      inserted i 
      on tc.DocNo = i.DocNo ; 
END; 

Однако, возможно, вычисляемый столбец достаточно для ваших целей:

alter table add PO_Number as Purchase_Requisition; 
+0

Большое спасибо. оцените всю помощь. Я рад, что я всегда могу узнать новые вещи здесь. – James

1

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

ALTER TRIGGER [dbo].[PO_Number_Trigger] 
ON [dbo].[TheCat2] 
AFTER INSERT, UPDATE 
AS BEGIN 

    UPDATE dbo.TheCat2 SET PO_Number=(select top 1 Purchase_Requisition from inserted) where DocNo= (Select top 1 DocNo from inserted); 
END 
+0

Большое спасибо, довольно свежий в SQL-скриптах и ​​ценю помощь. Всегда рады узнать новые вещи. – James

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