SQL 服务器不接受触发器的正确语法
SQL Server not accepting correct syntax on trigger
我正在 Microsoft SQL Server 2012
中开发触发器
这是我目前所知道的,遵循我所知道的正确语法:
CREATE TRIGGER restore_trigger
ON dbo.Lead
AFTER DELETE OF id, firsname, lastname, postalcode, address,phone, email, title, managementlevel, lastcalldate, lastcallresult, companyid
REFERENCING OLD ROW as OldRow
FOR EACH ROW
INSERT INTO dbo.Lead
VALUES (OldRow.id, OldRow.firstname, OldRow.lastname, OldRow.postalcode, OldRow.address, OldRow.phone, OldRow.email,
OldRow.title, OldRow.managmentlevel, OldRow.lastcalldate, OldRow.lastcallresult, OldRow.companyid);
Microsoft SQL 服务器抛出错误 'of' 以及我想插入到 dbo.Lead.
的 OldRow 中的所有值
正如我所说 - 当涉及到 T-SQL 触发器时,您当前的代码充满了语法和逻辑错误。
如果您想 "save" 旧值(正在删除),您可以使用此代码:
CREATE TRIGGER restore_trigger
ON dbo.Lead
AFTER DELETE
AS
INSERT INTO dbo.Lead (id, firstname, lastname, postalcode, address, phone, email, title, managmentlevel, lastcalldate, lastcallresult, companyid)
SELECT
id, firstname, lastname, postalcode, address, phone, email, title, managmentlevel, lastcalldate, lastcallresult, companyid
FROM
Deleted;
通知:
- 我建议 始终 指定要插入的列 - 无一例外。
- 您只需要一个
SELECT
语句从 Deleted
伪 table 获取所有行并将这些值插入目标 table - 这也将处理 多行 删除(如果您的语句删除 20 行)
但我不清楚您为什么要 INSERT 已删除的行返回到 table 中,它们正从中被删除.... .. 这样做的目的是什么??通常,您更愿意将这些值存储到 Audit table 或其他内容中......
如果您想基本上撤消 DELETE
的影响 - 为什么不只是 防止 DELETE
首先,通过从那些不允许删除的用户那里删除 table 的删除权限?....似乎更有效 prevent 不需要的操作,而不是在触发器中撤消它....
我正在 Microsoft SQL Server 2012
中开发触发器这是我目前所知道的,遵循我所知道的正确语法:
CREATE TRIGGER restore_trigger
ON dbo.Lead
AFTER DELETE OF id, firsname, lastname, postalcode, address,phone, email, title, managementlevel, lastcalldate, lastcallresult, companyid
REFERENCING OLD ROW as OldRow
FOR EACH ROW
INSERT INTO dbo.Lead
VALUES (OldRow.id, OldRow.firstname, OldRow.lastname, OldRow.postalcode, OldRow.address, OldRow.phone, OldRow.email,
OldRow.title, OldRow.managmentlevel, OldRow.lastcalldate, OldRow.lastcallresult, OldRow.companyid);
Microsoft SQL 服务器抛出错误 'of' 以及我想插入到 dbo.Lead.
的 OldRow 中的所有值正如我所说 - 当涉及到 T-SQL 触发器时,您当前的代码充满了语法和逻辑错误。
如果您想 "save" 旧值(正在删除),您可以使用此代码:
CREATE TRIGGER restore_trigger
ON dbo.Lead
AFTER DELETE
AS
INSERT INTO dbo.Lead (id, firstname, lastname, postalcode, address, phone, email, title, managmentlevel, lastcalldate, lastcallresult, companyid)
SELECT
id, firstname, lastname, postalcode, address, phone, email, title, managmentlevel, lastcalldate, lastcallresult, companyid
FROM
Deleted;
通知:
- 我建议 始终 指定要插入的列 - 无一例外。
- 您只需要一个
SELECT
语句从Deleted
伪 table 获取所有行并将这些值插入目标 table - 这也将处理 多行 删除(如果您的语句删除 20 行)
但我不清楚您为什么要 INSERT 已删除的行返回到 table 中,它们正从中被删除.... .. 这样做的目的是什么??通常,您更愿意将这些值存储到 Audit table 或其他内容中......
如果您想基本上撤消 DELETE
的影响 - 为什么不只是 防止 DELETE
首先,通过从那些不允许删除的用户那里删除 table 的删除权限?....似乎更有效 prevent 不需要的操作,而不是在触发器中撤消它....