【发布时间】:2019-10-21 18:54:38
【问题描述】:
我正在尝试创建一个触发器来插入我从“备份”表中的表中删除的所有值, 例如:
Table 1: NomePilota, ModelloVettura, NomeScuderia
BackupTable1 (Table 2): NomePilota, ModelloVettura, NomeScuderia
我希望触发器执行的操作:将表 1 中的已删除值插入到“表 2”中。
我试过这样:
CREATE TRIGGER Backup ON dbo.Table1 AFTER (i can only use after) DELETE AS
BEGIN
DECLARE @Pilota VARCHAR(20) = (SELECT NomePilota FROM deleted)
DECLARE @Vettura VARCHAR(50) = (SELECT ModelloVettura FROM deleted)
DECLARE @Scuderia VARCHAR(20) = (SELECT NomeScuderia FROM deleted)
INSERT INTO Table2 (NomePilota, ModelloVettura, NomeScuderia) VALUES (@Pilota, @Vettura, @Scuderia)
但它发送一个错误:
无法在@Pilota、@Vet、@Scud 中插入多条记录
我该如何解决这个问题?删除的表是否已经有一个默认的 ID 列可以在 for 中使用?我可以使用向量之类的东西吗? (like @Nome[] = SELECT * FROM Tabella, Insert into Tabella2 (Nome) VALUES @Nome[@Numero (numero 就像是nome的记录号])。
【问题讨论】:
-
您使用的是哪个 RDBMS?您使用了两个与 mysql 相关的标签,还使用了 sql-server 标签。此外,您显示的 DECLARE 语法似乎是 Microsoft SQL Server 语法(MySQL 在触发器中的局部变量之前不使用
@sigil)。那么它是什么? -
正如错误消息明确指出的那样,您的选择查询返回了多行...
-
通过
@var声明、dbo.限定符和对deleted的引用,我们可以很确定这是 Transact-SQL (MIcrosoft SQL Server) 而不是 MySQL -
查看docs,在开始之前,您需要很好地了解 SQL Server 触发器的工作原理。由于
Inserted和Deleted可以有多行,因此您必须在触发器中处理此问题。理想情况下使用适当的基于集合的逻辑,否则逐行操作。
标签: sql-server sql-delete database-trigger