我试图创建该表上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