更新触发问题之前
问题描述:
我试图创建完成以下更新触发问题之前
触发检查场ACTION_TYPE行中,它是具有更新请求
如果行(更新前的值)有一个ACTION_TYPE为空,我想插入值/字符串“更改”。
如果行(更新之前)有一个包含字符串'Add'的ACTION_TYPE,我希望保持该值。
如果行(更新之前)有一个包含字符串'Change'的ACTION_TYPE,我希望保留该值。
CREATE TRIGGER tbl8_change
ON HOLIDAY_DATE_TABLE
BEFORE UPDATE
AS
BEGIN
IF ((SELECT ACTION_TYPE FROM HOLIDAY_DATE_TABLE
WHERE
inserted.HID = HOLIDAY_DATE_TABLE.HID) == NULL) THEN
INSERT INTO HOLIDAY_DATE_TABLE (ACTION_TYPE)
VALUES ('Changed')
WHERE inserted.HID = HOLIDAY_DATE_TABLE.HID;
IF ((SELECT ACTION_TYPE FROM HOLIDAY_DATE_TABLE
WHERE
inserted.HID = HOLIDAY_DATE_TABLE.HID) == 'Changed') THEN
INSERT INTO HOLIDAY_DATE_TABLE (ACTION_TYPE)
VALUES ('Changed')
WHERE inserted.HID = HOLIDAY_DATE_TABLE.HID;
IF ((SELECT ACTION_TYPE FROM HOLIDAY_DATE_TABLE
WHERE
inserted.HID = HOLIDAY_DATE_TABLE.HID) == 'Add') THEN
INSERT INTO HOLIDAY_DATE_TABLE (ACTION_TYPE)
VALUES ('Add')
WHERE inserted.HID = HOLIDAY_DATE_TABLE.HID;
END
我的语法有点不对,任何帮助将不胜感激。
答
您可以使用具有相同效果的AFTER
触发器;
CREATE TRIGGER trg_hdt ON holiday_date_table
AFTER UPDATE AS
BEGIN
UPDATE hdt SET hdt.action_type='Change'
FROM holiday_date_table hdt JOIN inserted i ON hdt.id = i.id
WHERE hdt.action_type IS NULL
END;
基本上它所做的是将所有更新的行与表本身连接起来,并更改匹配的适当值。
而不是将插入的表链接到基表,您可以检查已删除的表。另外,如果您执行INSERT而不是UPDATE,则您现有的行将保留在表中。 – 2014-10-06 18:12:54
SQL Server没有'BEFORE'触发器.....只有'AFTER/ON'或'INSTEAD OF ....' – 2014-10-06 18:17:13
检出'INSTEAD OF'触发器[使用INSTEAD OF触发器](http: //www.mssqltips.com/sqlservertip/1804/using-instead-of-triggers-in-sql-server-for-dml-operations/) – Tak 2014-10-06 18:55:19