我試圖創建該表上component
操作和記錄UPDATE
,DELETE
和INSERT
操作表component_history
SQL服務器觸發 - 設置變量= column.value
CREATE TRIGGER component_hist
ON component
AFTER INSERT, UPDATE, DELETE
AS
DECLARE
@tr_action varchar(8),
@tr_id_compoment int,
@tr_name varchar(max),
@tr_value int
IF COLUMNS_UPDATED() <> 0 -- delete or update?
BEGIN
SET @tr_action = 'UPDATE'
ELSE -- delete
BEGIN
SET @tr_action = 'DELETE'
END
INSERT INTO component_history VALUES (@tr_id_component, @tr_name, @tr_value, @tr_action);
我怎麼能發送觸發來自表component
的列(id, name, value
)的信息轉換爲component_history
?
我已經試過:
SET
@tr_id_component = component.id,
@tr_name = component.name,
@tr_value = component.value
但報道:
消息4104,級別16,狀態1,過程component_hist,第22行
多部分標識符「的組成部分。 ID「不能被綁定。
這裏給你的問題的一些元素在這裏:http://stackoverflow.com/questions/1751715/sql-server-trigger-switching-insert-delete-update –
假設至少有一個插入已成功處理(所以行存在於表中),'EXISTS(SELECT * FROM component)'將始終爲真。觸發器在每個語句中觸發一次,而不是每行觸發一次,因此考慮將值放入變量始終是錯誤的。 –
這是第二件事,它是ORACLE的構造,但MSSQL不支持BEFORE語句,所以我現在只使用AFTER(我不知道如何解決之前):(( – gaffcz